当前位置: 首页 > 知识库问答 >
问题:

Laravel在请求中检索绑定模型

厍彭薄
2023-03-14

是否有任何简单的方法可以检索请求中的路由绑定模型?

我想更新模型,但在此之前,我想使用Requestsauthorize()方法执行一些权限检查。但我只希望模型的所有者能够更新它。

在控制器中,我只需执行以下操作:

public function update(Request $request, Booking $booking)
{
    if($booking->owner->user_id === Auth::user()->user_id)
    {
       // Continue to update
    }
}

但是我希望在请求中,而不是在控制器中这样做。如果我这样做:

dd(Illuminate\Http\Request::all());

它只给我标量表单属性(如_method等,但没有模型)。

问题

如果我将一个模型绑定到一个路由,我如何从请求中检索该模型?

非常感谢。

共有3个答案

束新
2023-03-14

为了补充Martin Bean的答案,您可以使用route($param)访问绑定实例:

class UpdateRequest extends Request
{
    public function authorize()
    {
        $booking = $this->route('booking');

        return $booking->owner->user_id == $this->user()->id;
    }
}

注:这在Laravel 5.1中适用。我没有在旧版本上测试过这个。

狄法
2023-03-14

完成显式绑定后(https://laravel.com/docs/5.5/routing#route-模型绑定)实际上,您可以使用$this直接获取模型。

class UpdateRequest extends Request
{
    public function authorize()
    {
        return $this->booking->owner->user_id == $this->booking->user()->id;
    }
}

更干净!

韦欣德
2023-03-14

绝对的!这是我甚至用自己的方法。

您可以在请求中获取当前路由,然后获取任何参数,如:

class UpdateRequest extends Request
{
    public function authorize()
    {
        // Get bound Booking model from route
        $booking = $this->route('booking');

        // Eager-load owner relation if it’s not loaded already
        $booking->loadMissing('owner');

        return (string) $booking->owner->user_id === (string) $this->user()->getKey();
    }
}

与smartman(现已删除)的答案不同,如果您已经通过route–model binding检索模型,则不会产生另一个find查询。

然而,我个人也会在这里使用策略,而不是在表单请求中进行授权检查。

 类似资料:
  • 问题内容: 我想使用jQuery来获取URL,并明确检查它是否响应302重定向,但 不 遵循重定向。 jQuery 似乎总是遵循重定向。如何防止这种情况,并且不遵循重定向就可以看到重定向? 标题有很多问题,例如“ jquery ajax redirect”,但它们似乎都涉及实现其他目标,而不仅仅是直接检查服务器给出的状态。 问题答案: AJAX请求永远不会有机会不遵循重定向(即,它必须遵循重定向)

  • 问题内容: 通过AJAX进行MVC模型绑定时遇到一些麻烦。 谁能告诉我为什么CreateTransfereeDetails属性没有绑定,它总是返回为“ null”。 模型: HTML: JavaScript: 谢谢! 问题答案: 用于表单内的输入字段。自动分配给模型的属性。 并使用jquery的serialize()函数使用ajax传递数据

  • 所以我正在尝试为内部项目开发一个rest API,我遇到了一个问题,当表单请求验证失败时,它会显示@index响应。 所以我有两条路线; 列出所有客户端,创建一个新客户端,我在方法上获得了一个表单请求验证器,该验证器检查为客户端提供的名称。 我想要的是,当验证器失败时,它会显示带有验证错误的JSON响应。但我认为,验证失败了,所以它重定向回同一个页面,但重定向是GET,而不是POST,因此它列出了

  • 我正在Spring 3.1上构建REST服务。我正在为此使用@EnableWebMVC注释。由于我的服务将只接受JSON请求,因此我还希望将传入请求转储到MongoDB集合中以进行日志记录(以及稍后的数据转换)。我想访问原始的JSON请求(我可以在非Spring实现上使用“@Content HttpServletRequest request”作为方法参数来执行此操作)。 我是Spring新手。因

  • 除了使用自定义操作等之外,还有什么方法可以告诉绑定器,我希望它获取HTTP请求参数内容的值,并将其设置在我的模型对象的value属性上。以后的请求将重用相同的HTTP参数,所以我不能只是更新我的模型,因为该值将不断被覆盖

  • 我希望通过ContainerRequestFilter中的ExtendedUriInfo检索matchedResources/matchedResults,以便检查路径是否应该受到保护。是否有一种方法可以创建一个在ExtendedUriInfo填充之后,但在调用匹配的资源类和方法之前调用的筛选器?