![](/img/trans.png)
[英]What is the purpose of the authorize method in a Request class in Laravel?
[英]Object to authorize method of Request in Laravel
当我们创建新的FormRequest时,我们有方法
public function authorize()
{
return 1;
}
我的问题是,我可以从表格中获取任何雄辩的模型对象吗?
喜欢
public function authorize(Posts $post)
?
我意识到我可以在这里读取请求数据,例如$this->content
但是我可以把整个物品寄到这里吗?
让我们假设我们有post
收集。
我有表格
如果我能有类似的东西
<form method="post" action="{{ route('temat.post.like', $post) }}">
而在这条路线的控制器方法中, public function post_like(LikePost $request)
然后在授权方法称为class LikePost extends FormRequest
有此$post
像public function authorize(Posts $post)
我不知道是否有可能以某种方式在授权方法中获得它,我一直在寻找,但我认为这是不可能的,但我可能是错的,这就是为什么我问
我的意思是在这个authorize()
方法中,通过该参数获取口才模型,就像Controllers一样。
例如
public function authorize(Users $user)
网址: /like/15
通过ID 15获取的用户模型
在方法上我们可以使用它。
喜欢
public function authorize(Users $user)
{
return $user->status;
}
其中$ user是用户口才模式
不确定要实现什么目标。 请求类不应解析模型,因为这不是他们的职责。
如果需要,我建议创建一个带有吸气剂的FormRequest单例,它将识别您的模型绑定。
您必须注册模型绑定才能在方法上解析特定模型-请求参数必须与具体类相关
FormRequest::bind('user_id', function ($value) {
return User::where('id', $value)->firstOrFail();
});
现在,您有两个选择:
在对象上下文中调用不可访问的方法时,会触发__call()。
你必须像这样包装你的绑定
class FormRequest {
public funciton authorize(User $user);
}
class FormRequestCaller {
private $formRequest;
public function __call($name, $arguments) {
$entity = FormRequest::resolve($name, $arguments);
return $this->$name($entity);
}
public static function resolve($bindingName, $data) {
return call_user_func_array($bindings[$bindingName], $data);
}
}
-
class FormRequest {
public funciton authorize() {
$user = $this->getUser();
}
public function __call($name, $arguments) {
return FormRequest::resolve(ucfirst(str_replace('get','',$name), $arguments));
}
public static function resolve($bindingName, $data) {
return call_user_func_array($bindings[$bindingName], $data);
}
}
当然,必须对此进行调整,但是您应该明白这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.