2017-08-07 46 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

方法沒有任何關於這個我問。多閱讀一遍這些部分 –