Intereting Posts

Как определить маршрут Laravel с параметром, который содержит символ косой черты

Я хочу определить маршрут с параметром, который будет содержать косую черту / символ, например example.com/view/abc/02 где параметр abc/02 является параметром.

Как я могу препятствовать тому, чтобы Laravel читал косую черту как разделитель для следующего параметра маршрута? Из-за этого я получаю 404 not found error сейчас.

Добавьте ниже всего маршрута catch-all в routes.php вашего routes.php и не забудьте впоследствии выполнить routes.php composer dump-autoload . Обратите внимание на использование «-> где», которое указывает возможное содержимое параметров, позволяющее использовать параметр, содержащий косую черту.

 //routes.php Route::get('view/{slashData?}', 'ExampleController@getData') ->where('slashData', '(.*)'); 

И чем в вашем контроллере вы просто обрабатываете данные, как обычно, (например, он не содержит косой черты).

 //controller class ExampleController extends BaseController { public function getData($slashData = null) { if($slashData) { //do stuff } } } 

Это должно сработать для вас.

Кроме того, здесь у вас есть подробные документы Laravel о параметрах маршрута: [ docs ]

В Laravel не работают сленкованные косые черты, из-за того, что я считаю ошибкой. https://github.com/laravel/framework/pull/4323 Этот запрос на перенос разрешит эту ошибку.

Обновить.

Обратите внимание, что это изменение позволяет анализировать маршрут перед расшифровкой значений в пути.

У меня аналогичная проблема, но мой URL-адрес содержит несколько параметров маршрута:

 /test/{param1WithSlash}/{param2}/{param3} 

И вот как я справился с этим делом:

  Route::get('test/{param1WithSlash}/{param2}/{param3}', function ($param1MayContainsSlash, $param2, $param3) { $content = "PATH: " . Request::path() . "</br>"; $content .= "PARAM1: $param1WithSlash </br>"; $content .= "PARAM2: $param2 </br>".PHP_EOL; $content .= "PARAM3: $param3 </br>".PHP_EOL; return Response::make($content); })->where('param1MayContainsSlash', '(.*(?:%2F:)?.*)'); 

Надеюсь, это поможет.