如何使用包含斜杠字符的参数定义Laravel路径

hse*_*usv 45 php laravel

我想定义一个带有参数的路由,该参数将包含斜杠/字符,因此参数example.com/view/abc/02在哪里abc/02.

如何防止Laravel读取斜杠作为下一个路径参数的分隔符?因为我现在得到了404 not found error.

Gad*_*oma 94

将以下全能路线添加到您的底部routes.php并记住composer dump-autoload之后运行.注意使用" - > where"指定params的可能内容,使您可以使用包含斜杠的param.

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

而在你的控制器中,你只需按照通常的方式处理数据(就像它没有包含斜杠一样).

//controller 
class ExampleController extends BaseController {

    public function getData($slashData = null)
    {
        if($slashData) 
        {
            //do stuff 
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这应该适合你.

此外,您还可以在此处获得有关路线参数的详细Laravel文档:[ docs ]

  • 它的工作方式类似于Lumen` $ app-> get('/ documents/{document:.+}','DocumentController @ show');` (3认同)
  • 我不同意,这是一个解决 Laravel 路由不足的技巧。查看我的答案和 laravel 包,它提供了对编码斜杠的修复。 (2认同)
  • 在我的用例中,我在“斜杠参数”之后有另一个参数,如下所示:`url/slash%2Fparameter/12`- 带有类似 `url/{slashData}/{id}` 的路由。这应该有效,但不是由于 laravel 错误。你的“解决方案”会给 `getData()` 整个 `slash/parameter/12`,我必须自己从 id 中分离斜杠参数。那是 laravel 的工作,不是我的! (2认同)

小智 9

我有一个类似的问题,但我的 URL 包含几个路由参数:

/test/{param1WithSlash}/{param2}/{param3}
Run Code Online (Sandbox Code Playgroud)

以下是我处理该案的方式:

    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:)?.*)');
Run Code Online (Sandbox Code Playgroud)

希望它能有所帮助。


RJF*_*res 8

在 Laravel 8+ 中

Route::get('/search/{search}', function ($search) {
    return $search;
})->where('search', '.*');
Run Code Online (Sandbox Code Playgroud)

参考:

https://laravel.com/docs/routing#parameters-encoded-forward-slashes


Art*_*tan 5

由于我认为是一个错误,urlencoded斜杠在Laravel中不起作用. https://github.com/laravel/framework/pull/4323 此拉取请求将解决该错误.

更新.

请注意,更改允许在解码路径中的值之前解析路由.

  • 错误修复被拒绝所以我写了一个包... github.com/Artistan/Urlencode (2认同)