Я хочу определить маршрут с параметром, который будет содержать косую черту /
символ, например 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:)?.*)');
Надеюсь, это поможет.