Php 防止将路由前缀作为第一个参数传递给Laravel 5中的子路由
如何防止路由前缀作为第一个参数传递给所有子路由控制器函数?它弄乱了我孩子的$id参数Php 防止将路由前缀作为第一个参数传递给Laravel 5中的子路由,php,laravel,laravel-5,Php,Laravel,Laravel 5,如何防止路由前缀作为第一个参数传递给所有子路由控制器函数?它弄乱了我孩子的$id参数 Route::prefix('{locale?}')->middleware(['locale.default', 'locale'])->group(function() { Route::get('/car/{id}', [ 'uses' => 'CarController@getCar', 'as' => 'car',
Route::prefix('{locale?}')->middleware(['locale.default', 'locale'])->group(function() {
Route::get('/car/{id}', [
'uses' => 'CarController@getCar',
'as' => 'car',
'middleware' => 'auth'
])->where(['id' => '[0-9]+']);
});
在CarController的getCar()函数中,id参数获取的是区域设置(en、fr、it),而不是要传递的汽车的id
public function getCar($id)
{
$car = Car::where('id', $id)->firstOrFail();
}
要解决此问题,我必须执行以下操作:
public function getCar($locale, $id)
{
$car = Car::where('id', $id)->firstOrFail();
}
有没有一种方法可以简单地防止将$locale传递给子路由的控制器函数,这样我就不必将$locale作为第一个参数添加到每个函数中
如果我将getCar()参数从$id更改为request类型的$request,我可以这样做,并且它可以工作。这是一个好的解决方案吗
public function getCar(Request $request)
{
$car = Car::where('id', $request->id)->firstOrFail();
}
Laravel 5.6文档似乎说这是可以做到的:
通过路由关闭访问请求
您还可以在路由上键入hint\Http\Request类
关闭。服务容器将自动注入传入的
在执行时请求关闭:
使用\Http\Request
路由::get(“/”,函数(Request$Request){
//... });
有人能确认一下吗?谢谢 更明智的做法是使用服务提供商设置语言环境 本文将指导您了解多语言和Laravel的体系结构 祝你一切顺利
public function callAction($method, $parameters)
{
unset($parameters['prefix']);
return parent::callAction($method, $parameters);
}
这应该在控制器中调用
使用中间件,只需将此行添加到处理程序:
$request->route()->forgetParameter('prefix');
谢谢你的回复。这正是我所做的。从我的代码中可以看出,我有两个自定义中间件用于处理区域设置和设置默认本地设置。