【问题标题】:Customizing model-stored validation rules in Laravel在 Laravel 中自定义模型存储的验证规则
【发布时间】:2014-01-14 02:41:00
【问题描述】:

假设我在 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 中针对不同的情况修改模型存储的验证规则? 我是否必须重新组织我的规则存储方法?

谢谢!

【问题讨论】:

    标签: php validation model laravel


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      例如:

      如果我是对的,您只需要在注册用户和更新密码时使用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';
      });
      

      【讨论】:

      • 感谢您的回答!动态添加规则是个好主意,但是它不提供为特定字段添加/删除特定规则的可能性!例如password字段有规则confirmed(在模型中定义)但是当不需要密码确认时必须删除该规则!
      • 您无法添加或删除特定规则,但您可以在使用之前重新设置规则。 $rules['password'] = 'required|min:8';
      【解决方案3】:

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

      http://laravel.com/docs/validation

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

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

      【讨论】:

        【解决方案4】:

        我做这样的事情。

        在模型中:

        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 }
        

        【讨论】:

          猜你喜欢
          • 2017-04-11
          • 2018-02-18
          • 2017-12-01
          • 2014-04-22
          • 2019-02-12
          • 2016-11-22
          • 2015-01-26
          • 2016-01-13
          • 2014-11-25
          相关资源
          最近更新 更多