如何使 Laravel 的 Validator $rules 成为可选?

2023-12-06

假设我有User模型有两种方法:

User.php

class User extends Eloquent
{  
    /* Validation rules */
    private static $rules = array(
        'user'  => 'unique:users|required|alpha_num',
        'email' => 'required|email'
    );

    /* Validate against registration form */
    public static function register($data)
    {
        $validator = Validator::make($data, static::$rules);
        if($validator->fails())
        {
            /*... do someting */
        }
        else
        {
            /* .. do something else */
        }
    }

    /* Validate against update form */
    public static function update($data)
    {
        $validator = Validator::make($data, static::$rules);
        if($validator->fails())
        {
            /*... do someting */
        }
        else
        {
            /* .. do something else */
        }
    }
}

我的问题:我怎样才能使验证规则可选,这样即使数据update()会只是email字段,它会忽略user并仍然验证true.
这是否可能,或者我错过了什么?

对不起,我的英语不好。


不确定我是否正确回答了您的问题,但如果用户是可选的,您应该从验证器中删除“必需”。这样你将拥有:

'user'  => 'unique:users|alpha_num',

代替:

'user'  => 'unique:users|required|alpha_num',

另一方面,我为模型创建一个自定义方法,该方法能够根据传入参数返回自定义验证规则。

例如:

private function getValidationRules($rules)
{
    if ($rules == UPDATE_EMAIL)
    {
        return array('email' => 'required|email');
    } else {
        return array(
            'user'  => 'unique:users|required|alpha_num',
            'email' => 'required|email'
        );
    }
}

我想这只是个人选择,但我发现从方法获取验证规则可以更好地控制我真正想要验证的内容,特别是当您想要执行一些高级验证时。

希望对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 Laravel 的 Validator $rules 成为可选? 的相关文章