在Laravel中自定义模型存储的验证规则

arn*_*ins 4 php validation model laravel

比方说,我在Laravel中有一个User模型,如下所示:

class User extends Eloquent implements UserInterface, RemindableInterface {

    public static $rules = array(
        'email' => 'required|email',
        'password' => 'required|min:8|confirmed',
        'password_confirmation' => 'required|min:8'
    );

    ...

}
Run Code Online (Sandbox Code Playgroud)

存储在模型中的规则将重复用于登录和注册表单,但是当不需要密码确认(例如登录表单)时会出现问题.并且可能存在许多应该改变规则的情况.

那么,有没有任何纯方法如何修改Laravel中不同情况的模型存储验证规则?我是否必须重新组织我的规则存储方法?

谢谢!

Ana*_*nam 12

您可以在需要时动态添加规则.

例如:

如果我是对的,那么password_confirmation在注册用户和更新密码时只需要规则.因此,在您的模型中,不要添加password_confirmation规则.

public static $rules = array(
        'email' => 'required|email',
        'password' => 'required|min:8|confirmed'

}
Run Code Online (Sandbox Code Playgroud)

如何动态添加规则:

要注册用户,该password_confirmation字段是必填字段.因此,您可以从控制器中添加如下规则:

$rules = User::$rules;

$rules['password_confirmation'] = 'required|min:8';
Run Code Online (Sandbox Code Playgroud)

有时您可能需要根据用户输入添加规则.

例如:

如果用户选择Australia国家/地区,则还必须选择州.

$v = Validator::make($data, $rules ));
$v->sometimes('state', 'required', function($input)
{
   return $input->country == 'Australia';
});
Run Code Online (Sandbox Code Playgroud)

  • 您无法添加或删除特定规则,但可以在使用规则之前重新设置规则.`$ rules ['password'] ='required | min:8';` (3认同)

小智 11

游戏的后期,但根据Laravel文档,您可以使用"有时"规则.

http://laravel.com/docs/validation

简而言之:在某些情况下,只有在输入数组中存在该字段时,您可能希望对字段运行验证检查.要快速完成此操作,请将有时规则添加到规则列表中:

    'password_confirmation' => 'sometimes|required|min:8|confirmed'
Run Code Online (Sandbox Code Playgroud)


小智 10

我这样做.

在模型中:

public static $rules = [
    'create' => [
        'first_name' => 'min:3',
        'last_name'  => 'min:3',
        'email'      => 'required|email|unique:users',
        'password'   => 'required|min:5|confirmed'
        ],
    'edit'   => [
        'first_name' => 'other',
        'last_name'  => 'other',
        'email'      => 'other',
        'password'   => 'other|min:5'
        ]
     ];
Run Code Online (Sandbox Code Playgroud)

在控制器中:

$validator = Validator::make( $input, User::$rules['edit'] ); # Or User::$rules['create']

if ( $validator->fails() ) { code }
Run Code Online (Sandbox Code Playgroud)