Laravel 中多型關係的表單驗證 (trait 版)

農村閒散勞動力發表於2018-10-22

看了超哥的 Laravel 中多型關係的表單驗證, 實用性很強! 我在大佬之上擴充了一下.
不懂的請看超哥原文!

使用trait擴充套件更靈活

trait RegisterValidator
{

    public function __construct()
    {
        $this->registerValidators();
    }

    public function registerValidators()
    {
        if (property_exists($this, 'validators')){

            foreach ($this->validators as $rule => $validator) {
                Validator::extend($rule, "{$validator[0]}@{$validator[1]}");
            }
        }
    }
}

配置屬性

 public $validators = [
        'sms'=>[
            UserValidator::class, 'SMSVerification'
        ],
    ];

自定義的處理類

class UserValidator
{
    public function SMSVerification($attribute, $value, $parameters, $validator)
    {
    }
}

在使用request中使用

class UserRequest extends FormRequest
{
    use RegisterValidator;

    /**
     * 註冊自定義驗證規則
     *
     * @var array
     */
    public $validators = [
        'sms'=>[
            UserValidator::class, 'SMSVerification'
        ],
    ];

    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'code'=>[
                'sms'
            ]
        ];
    }

}


在controller中使用

class UserController extends Controller
{
    use RegisterValidator;

    /**
     * 自定義驗證規則
     *
     * @var array
     */
    public $validators = [
        'sms'=>[
            UserValidator::class, 'SMSVerification'
        ],
    ];

    public function store(Request $request)
    {
        $this->validate($request, [
            'code'=>'sms'
        ]);
    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章