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


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

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

 40
Author: Laurence, 2014-02-04

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 по параметрам маршрута: [ документы ]

 76
Author: Gadoma, 2014-08-28 17:07:13

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

Обновление.

Обратите внимание, что изменение позволяет анализировать маршрут ПЕРЕД декодированием значений в пути.

 5
Author: Artistan, 2014-05-04 01:39:28

У меня аналогичная проблема, но мой 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:)?.*)');

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

 2
Author: Pierre, 2016-03-09 14:02:05