Laravel多重自定义验证

Kou*_*sha 3 php validation laravel

我想添加多个自定义验证,每个验证都是自己的文件.

到目前为止,我已将app/start/global.php文件修改为

global.php

ClassLoader::addDirectories(array(
    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/models',
    app_path().'/database/seeds',
    app_path().'/validators'        // <--- Added this folder
));

// Only the first resolver works. 
// I cannot seem to have multiple of these files

Validator::resolver(function($translator, $data, $rules, $messages) 
{
    return new ScheduleValidator($translator, $data, $rules, $messages);
});

Validator::resolver(function($translator, $data, $rules, $messages) 
{
    return new UserValidator($translator, $data, $rules, $messages);
});
Run Code Online (Sandbox Code Playgroud)

我的每个验证文件都在/validatorsas中

ScheduleValidator.php

class ScheduleValidator extends Illuminate\Validation\Validator
{
    protected $implicitRules = array('Required', 'RequiredWith', 'RequiredWithout', 'RequiredIf', 'Accepted', 'RequiredWithoutField');
    public function __construct(\Symfony\Component\Translation\TranslatorInterface $translator, $data, $rules, $messages = array())
    {
        parent::__construct($translator, $data, $rules, $messages);
        $this->isImplicit('fail');
    }

    /**
    * Validates type to be of the type 'common', 'template', or 'revision'
    */
    public function validateTypeSchedule($attribute, $value, $parameters = null)
    {
        $valid_types = ['template', 'common', 'revision'];
        return in_array($value, $valid_types);
    }

    // and the other validators ...
}
Run Code Online (Sandbox Code Playgroud)

那么如何添加多个这些验证器呢?

Ezr*_*zra 6

我通过制作所有单独的验证器特征来解决这个问题,因此我的一个自定义验证器可以简单地"使用"我的特征并仍然将它们分开.

我的验证员:

<?php

use Illuminate\Validation\Validator as LaravelValidator;

class CustomValidator extends LaravelValidator {
    use PhoneValidatorTrait;

}
Run Code Online (Sandbox Code Playgroud)

我的特点:

<?php

class PhoneValidatorTrait {
    public function validateSomething(){ ... }
}
Run Code Online (Sandbox Code Playgroud)

解析:

<?php

Validator::resolver(function($translator, $data, $rules, $messages)
{
    return new CustomValidator($translator, $data, $rules, $messages, []);
});
Run Code Online (Sandbox Code Playgroud)