2017-08-07 99 views
0

当我们创建新FormRequest我们有方法对象授权请求的方法Laravel

public function authorize() 
{ 
    return 1; 
} 

我的问题是,我可以有东西在这里,从形式,任何雄辩的模型对象?

public function authorize(Posts $post)

我意识到可通过,例如在这里的读取请求的数据$this->content

但我可以在这里发送整个对象?

让我们asumme我们post集合视图。

我有形式

如果我能有这样的事

<form method="post" action="{{ route('temat.post.like', $post) }}">

而且在这条路的控制方法public function post_like(LikePost $request)

然后在所谓class LikePost extends FormRequest授权方法有这个$postpublic function authorize(Posts $post)

我不知道是否有可能在授权方法中得到它,我寻找这个,我不认为这是可能的,但我可能是错的,这就是为什么我问

我的意思是有在这个authorize()方法中,通过此参数获取的Eloquent Model就像控制器一样。

例如

public function authorize(Users $user)

网址:/like/15

通过ID 15

和方法,我们可以用它撷取的用户模型。

public function authorize(Users $user) 
    { 
     return $user->status; 
    } 

其中$用户是用户雄辩型号

+0

是授权在控制器的方法? 也许这就是你要找的https://laravel.com/docs/5.4/routing#route-model-binding –

+0

@RafałŁyczkowski没有什么,我说,这是在请求 –

回答

1

不知道你想要达到的目标。 请求类不应解析模型,因为它不是他们的责任。创建

  • 控制器消费的要求和管理所有实体和busiess逻辑执行(实体存储库访问,创建一个使用管理类的资源)
  • Request类只能管理与特定服务请求相关的各个方面(检查,验证,格式化,访问)

如果您需要,我建议使用getter创建一个FormRequest单例,它将识别您的模型绑定。

您必须先注册模型绑定来解决上方法具体型号 - 要求PARAM必须与具体的类相关

FormRequest::bind('user_id', function ($value) { 
    return User::where('id', $value)->firstOrFail(); 
}); 

现在你有两个选择:

  • a)如果你需要加载在方法的PARAMS实体=>你必须创造这样解析访问方法。您可以在__call()方法中尝试这样做。由于

__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); 
    } 
} 
  • b绑定)另一种方法是创建配件系列

-

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); 
    } 
} 

当然,这应该必须调整,但你应该得到poi NT。

0

请参阅此链接: Form Request Validation

+0

方法没有任何关于这个我问。多阅读一遍这些部分 –