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

 chennaiqin854 发布于 2023-02-08 09:25

比方说,我在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'
    );

    ...

}

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

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

谢谢!

3 个回答
  • 您可以在需要时动态添加规则.

    例如:

    如果我是对的,那么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';
    });
    

    2023-02-08 09:27 回答
  • 游戏的后期,但根据Laravel文档,您可以使用"有时"规则.

    http://laravel.com/docs/validation

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

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

    2023-02-08 09:27 回答
  • 我这样做.

    在模型中:

    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 }
    

    2023-02-08 09:29 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有