2017-01-26 18 views
1

CreateReviewRequestというカスタムリクエストがあります。ユーザーがログインしている場合、ラーバル検証が必要です

は、この要求では、私はこの方法を持っている:あなたはnameキーで見ることができるように

/** 
* Get the validation rules that apply to the request. 
* 
* @return array 
*/ 
public function rules() 
{ 
    return [ 
     'name'  => 'required_if(auth->logged)', 
     'comments' => 'required|max:255', 
     'stars'  => 'required|min:1|max:5', 
    ]; 
} 

が、私は彼がログインしていない場合nameフィールドを埋めるために必要とされるように、クライアントから必要。

私の質問は、お客様がゲストである場合にnameを記入するにはどうすればよいのですか?

答えて

4

あなたはcheck()メソッドを使用することができます

public function rules() 
{ 
    return [ 
     'name'  => auth()->check() ? 'required' : '', 
     'comments' => 'required|max:255', 
     'stars'  => 'required|min:1|max:5', 
    ]; 
} 
+1

それは私が探していた答えです。ありがとう! –

0

簡単なチェックはできませんか?

/** 
* Get the validation rules that apply to the request. 
* 
* @return array 
*/ 
public function rules() 
{ 
    if (auth()->check()) { 
     return [ 
      'comments' => 'required|max:255', 
      'stars'  => 'required|min:1|max:5', 
     ]; 
    } 

    return [ 
     'name'  => 'required', 
     'comments' => 'required|max:255', 
     'stars'  => 'required|min:1|max:5', 
    ]; 
} 
+0

またはコントローラメソッドに認証ミドルウェアルートを取り付けます。 – devk

+0

認証ミドルウェアを接続すると、ゲストが間違っているルートにアクセスできなくなりますか? – Hammerbot

+0

あなたは正しいです。それはOPの問題を解決しません。私は最初に誤解しました。 – devk

0

メンバーのみ:のみ

$validator = Validator::make($request->all(), [ 

    'email' => auth()->check() ? '' : 'required|min:5|max:60|email', 

]); 

ゲスト:

$validator = Validator::make($request->all(), [ 

    'user_id' => auth()->check() ? 'required|integer|min:1' : '', 

]); 
0123を

両方:

$validator = Validator::make($request->all(), [ 

    'message' => 'required|min:10|max:1000' 

]); 

組み合わせ:

$validator = Validator::make($request->all(), [ 

    'email' => auth()->check() ? '' : 'required|min:5|max:60|email', 
    'user_id' => auth()->check() ? 'required|integer|min:1' : '', 
    'message' => 'required|min:10|max:1000' 

]);