Php Laravel:根据请求使用的条件确定的验证规则

Php Laravel:根据请求使用的条件确定的验证规则,php,validation,laravel-5,request,Php,Validation,Laravel 5,Request,我刚刚使用php artisan make:request MyExampleRequest创建了一个请求,接下来我要做的是建立一个逻辑,从表单输入中获取值,并对其进行比较,然后选择逻辑应该遵循的验证 在MyExampleRequest.php的rules()方法中,逻辑如下: public function rules() { if($valueFromPostInput === '2') { return [ 'email' => 'r

我刚刚使用
php artisan make:request MyExampleRequest
创建了一个请求,接下来我要做的是建立一个逻辑,从表单输入中获取值,并对其进行比较,然后选择逻辑应该遵循的验证

MyExampleRequest.php
rules()
方法中,逻辑如下:

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
发出的请求中发生这种情况,并在我的控制器中使用它,如
公共函数(MyExampleRequest$Request)

我一直在寻找答案,但找不到答案。我真的很感激你的回复


注:英语不是我的母语。

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

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;
}
或较短(但可读性较差)的版本:


我在想:有没有一种方法可以在不重复“return”中的大部分代码的情况下实现同样的事情?可能在返回数组中进行逻辑检查?这可能吗?
public function rules()
{
    return [
       'email' => 'required|email',
       'g-recaptcha-response' => 'required|recaptcha'
    ] + (request()->get("valueFromPost") === '2' ? [ 'confirm_email' => 'required|email|same:email' ] : []);    
}