Laravel:验证规则取决于请求使用条件的内容

时间:2017-11-06 22:10:01

标签: php validation laravel-5 request

我刚刚使用php artisan make:request MyExampleRequest创建了一个请求,接下来要做的就是有一个逻辑,我可以从表单输入中获取值并进行比较并选择逻辑遵循的验证。< / p>

rules()的{​​{1}}方法中,逻辑如下:

MyExampleRequest.php

我尝试了这个逻辑:

public function rules()
{
    if($valueFromPostInput === '2') {

        return [
            'email' => 'required|email',
            'confirm_email' => 'required|email|same:email',
            'g-recaptcha-response' => 'required|recaptcha'
        ];

    }

    return [
        'email' => 'required|email',
        'g-recaptcha-response' => 'required|recaptcha'
    ];
}

但那没用。

我知道我可以使用public function rules() { if($this->attributes->has('valueFromPostInput') === '2') { // more codes... } } 控制器内的下面的逻辑来实现这个:

MyExampleController.php

但我希望在我使用public function create(Request $request) { if($request->valueFromPostInput === '2') { $this->validate($request, [ 'email' => 'required|email', 'confirm_email' => 'required|email|same:email', 'g-recaptcha-response' => 'required|recaptcha' ]); } else { $this->validate($request, [ 'email' => 'required|email', 'g-recaptcha-response' => 'required|recaptcha' ]); } } 的请求中发生这种情况,并在我的控制器中使用php artisan make:request MyExampleRequest

我搜索了我找不到的答案。我真的很感激你的回应。

PS:英语不是我的母语。

1 个答案:

答案 0 :(得分:2)

您可以使用请求帮助程序:

public function rules()
{
    $baseRules = [
       'email' => 'required|email',
       'g-recaptcha-response' => 'required|recaptcha'
    ];
    if(request()->get("valueFromPost") === '2') {    
        return $baseRules + [                
            'confirm_email' => 'required|email|same:email'
        ];

    }

    return $baseRules;
}

或更短(但不太可读)的版本:

public function rules()
{
    return [
       'email' => 'required|email',
       'g-recaptcha-response' => 'required|recaptcha'
    ] + (request()->get("valueFromPost") === '2' ? [ 'confirm_email' => 'required|email|same:email' ] : []);    
}