是否有任何简单的方法可以检索请求中的路由绑定模型?
我想更新模型,但在此之前,我想使用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
等,但没有模型)。
问题
如果我将一个模型绑定到一个路由,我如何从请求中检索该模型?
非常感谢。
为了补充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中适用。我没有在旧版本上测试过这个。
完成显式绑定后(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;
}
}
更干净!
绝对的!这是我甚至用自己的方法。
您可以在请求中获取当前路由,然后获取任何参数,如:
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填充之后,但在调用匹配的资源类和方法之前调用的筛选器?