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

2022-08-30 09:05:52

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

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


答案 1

将下面的包罗万象的路线添加到您的底部,并记得之后运行。请注意,使用“->where”来指定参数的可能内容,使您能够使用包含斜杠的参数。routes.phpcomposer 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文档:[ docs ]


答案 2

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

希望它能有所帮助。


推荐