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

新手上路,请多包涵

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

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

原文由 hserusv 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 449
2 个回答

将下面的 catch-all 路由添加到你的 routes.php 的底部,然后记得运行 composer dump-autoload 。请注意指定参数可能内容的“->where”的使用,使您能够使用包含斜线的参数。

 //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 ]

原文由 Gadoma 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有一个类似的问题,但我的 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:)?.*)');

希望它能有所帮助。

原文由 Pierre 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏