【问题标题】:How to use the request route parameter in Laravel 5 form request?如何在 Laravel 5 表单请求中使用请求路由参数?
【发布时间】:2015-07-15 03:04:15
【问题描述】:

我是 Laravel 5 的新手,我正在尝试使用新的表单请求来验证我的应用程序中的所有表单。

现在我被困在需要删除资源的地方,我创建了一个 DeleteResourceRequest 只是为了使用授权方法。

问题是我需要在路由参数中找到请求的 id,但我看不到如何将其输入到授权方法中。

我可以像这样在控制器方法中使用 id:

public function destroy($id, DeletePivotRequest $request)
{
    Resource::findOrFail($id);
}

但是如何让它在表单请求的授权方法中工作?

【问题讨论】:

    标签: php laravel laravel-5 laravel-routing laravel-validation


    【解决方案1】:

    这很简单,只需使用route() 方法即可。假设你的路由参数叫做id:

    public function authorize(){
        $id = $this->route('id');
    }
    

    【讨论】:

    • 感谢您的快速回复。我做了 dd($this->route('id'));在授权方法中。它返回空值。 :(
    • 如果你使用资源路由,参数的名字应该是资源的名字。例如post 如果你有Route::resource('post', ...)
    • 是的,我最终通过倾倒他的路由对象本身来解决这个问题。太感谢了。 :)
    • $this->route('foo) 在 Laravel 5.2 控制器中对我不起作用(“错误评估代码”)。而 Route::current()->getParameter('foo') 确实 - (请参阅我的回答。)有什么改变还是我需要改变先加载别的东西?
    • @WilliamTurrell 这个问题是关于在表单请求方法中获取路由参数(在这种情况下为authorizeroute 方法仍然存在于请求对象上,但从未出现在控制器上。跨度>
    【解决方案2】:

    您可以通过 Illuminate\Http\Request 实例访问 Route 参数值

    public function destroy($id, DeletePivotRequest $request)
    {
        if ($request->route('id'))
        {
            //
        }
    
        Resource::findOrFail($id);
    }
    

    【讨论】:

      【解决方案3】:

      Laravel 5.2,来自控制器:

      use Route;
      
      ...
      
      Route::current()->getParameter('id');
      

      如果您想对具有多个 URL 参数的多个路由使用相同的控制器方法,我发现这很有用,并且可能并非所有参数都始终存在或可能以不同的顺序出现...

      即无论{id}在URL中的位置如何,getParameter('id')都会给你正确的答案。

      Laravel Docs: Accessing the Current Route

      【讨论】:

        【解决方案4】:

        我来这里是为了寻找答案,并在 cmets 中找到了它,因此想向其他使用资源路由尝试在表单请求中使用它的人澄清

        正如卢卡斯在他的评论中提到的: 给定资源控制器Route::resource('post', ...),您可以使用的参数将命名为post

        这对我很有用,但还不够完整。看来该参数将是资源存根最后一部分的单数版本。

        在我的例子中,路由定义为$router->resource('inventory/manufacturers', 'API\Inventory\ManufacturersController');

        可用的参数是manufacturer(存根最后一部分的单数版本inventory/manufacturers

        【讨论】:

          【解决方案5】:

          取决于您在路由中定义参数的方式。

          对于我下面的情况,它将是:'user' 不是 'id'

          $id = $this->route('user');

          【讨论】:

          【解决方案6】:

          在测试了其他解决方案后,似乎不适用于 laravel 8,但下面的方法有效

          Route::getCurrentRoute()->id
          

          假设你的路线是

          Route::post('something/{id}', ...)
          

          【讨论】:

            【解决方案7】:

            调用会得到参数id

            request()->route('id')
            

            $this->route('id')
            

            如果你使用资源路由,你需要使用资源名称调用

            // eg: resource
            Route::resource('users', App\Http\Controllers\UserController::class);
            
            $this->route('user')
            

            【讨论】:

              猜你喜欢
              • 2016-11-28
              • 2015-10-05
              • 1970-01-01
              • 2019-06-27
              • 2019-04-13
              • 2017-07-21
              • 1970-01-01
              • 2019-10-29
              • 2015-06-29
              相关资源
              最近更新 更多