Как определить маршрут Laravel с параметром, содержащим символ косой черты
Я хочу определить маршрут с параметром, который будет содержать символ косой черты /
, например example.com/view/abc/02
, где abc/02
- параметр.
Как я могу запретить Laravel считывать косую черту в качестве разделителя для следующего параметра маршрута? Из-за этого я сейчас получаю 404 not found error
.
3 answers
Добавьте приведенный ниже универсальный маршрут в нижнюю часть вашего 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 по параметрам маршрута: [ документы ]
Url-кодированные косые черты не работают в 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:)?.*)');
Надеюсь, это может помочь.