我想定义一个带有参数的路由,该参数将包含斜杠/字符,因此参数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 ]
小智 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)
希望它能有所帮助。
在 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
由于我认为是一个错误,urlencoded斜杠在Laravel中不起作用. https://github.com/laravel/framework/pull/4323 此拉取请求将解决该错误.
更新.
请注意,更改允许在解码路径中的值之前解析路由.
| 归档时间: |
|
| 查看次数: |
27649 次 |
| 最近记录: |