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

时间:2013-12-26 12:29:34

标签: php validation model laravel

让我们说,我在Laravel中有一个用户模型:

class User extends Eloquent implements UserInterface, RemindableInterface {

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

    ...

}

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

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

谢谢!

4 个答案:

答案 0 :(得分:12)

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

例如:

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

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

}

如何动态添加规则:

要注册用户,需要password_confirmation字段。因此,您可以从控制器中添加如下规则:

$rules = User::$rules;

$rules['password_confirmation'] = 'required|min:8';

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

例如:

如果用户选择Australia作为国家/地区,则他们还必须选择州。

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

答案 1 :(得分:11)

游戏后期,但根据Laravel文档,您可以使用“有时”规则。

http://laravel.com/docs/validation

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

    'password_confirmation' => 'sometimes|required|min:8|confirmed'

答案 2 :(得分: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'
        ]
     ];

在控制器中:

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

if ( $validator->fails() ) { code }

答案 3 :(得分:0)

据我所知,Ardent Package可以很好地处理Laravel的模型验证> 5.0。它似乎支持所有内置的验证功能(例如,有时使用'当你只想通过验证字段时)以及扩展它们。

http://packalyst.com/packages/package/laravelbook/ardent