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

我想定义一个带有参数的路由,其中​​包含斜杠/字符,如example.com/view/abc/02 ,其中abc/02是参数。

如何防止Laravel读取斜杠作为下一个路由参数的分隔符? 正因为如此,我得到了一个404 not found error

将下面的catch-allpath添加到routes.php的底部,并记住之后运行composer dump-autoload 。 注意使用“ – > where”来指定params的可能内容,使您能够使用包含斜线的参数。

 //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文档:[ 文档 ]

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

更新。

请注意,该更改允许在解码path中的值之前parsing路由。

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

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

这就是我如何pipe理这个案例:

  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:)?.*)'); 

希望它可以帮助。