当我们创建新的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()
方法中使用此参数获取的Eloquent模型,就像控制器一样。
e.g。
public function authorize(Users $user)
url:/like/15
通过id 15
获取用户模型在方法中我们可以使用它。
像
public function authorize(Users $user)
{
return $user->status;
}
其中$ user是User Eloquent Model
答案 0 :(得分:1)
不确定你想要达到什么目标。 请求类不应该解析模型,因为它不是他们的职责。
如果您需要,我建议创建一个带有getter的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);
}
}
当然,这应该进行调整,但你应该明白这一点。