Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止将路由前缀作为第一个参数传递给Laravel 5中的子路由_Php_Laravel_Laravel 5 - Fatal编程技术网

Php 防止将路由前缀作为第一个参数传递给Laravel 5中的子路由

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',

如何防止路由前缀作为第一个参数传递给所有子路由控制器函数?它弄乱了我孩子的$id参数

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');

谢谢你的回复。这正是我所做的。从我的代码中可以看出,我有两个自定义中间件用于处理区域设置和设置默认本地设置。