繁体   English   中英

OctoberCMS如何覆盖用户插件的onRegister()函数?

[英]OctoberCMS How to Override Users Plugin onRegister() Function?

我使用OctoberCMS基于Laravel。

我试图覆盖用户插件 onRegister()函数。

先前的答案帮助我扩展了插件。

我想仅使用alpha_dash将用户名限制为字母数字,并且限制为50个字符。

Account.php中的原始功能

public function onRegister()
{
...
    if ($this->loginAttribute() == UserSettings::LOGIN_USERNAME) {
        $rules['username'] = 'required|between:2,255';
    }

我的优先

用户事件文档https://github.com/rainlab/user-plugin#events

public function boot() {

    \RainLab\User\Models\User::extend(function($model) {

        $model->bindEvent('model.beforeUpdate', function() use ($model) {

            # User Register
            \Event::listen('rainlab.user.register', function($user, $data) {

                if ($this->loginAttribute() == UserSettings::LOGIN_USERNAME) {
                    $rules['username'] = 'required|alpha_dash|between:2,50';
                }

            });
        }); 
    }); 
}

错误

"Call to undefined method [loginAttribute]"

如果删除if语句和loginAttribute并仅使用$ rules ['username'],则仍可以使用非字母数字字符注册名称。

我已经能够使用此扩展新代码,但不能覆盖现有代码。

我认为您在这里不了解页面循环。

在用户已经注册之后,将调用rainlab.user.register 也就是说,他们已经通过验证,并且已经使用无效的用户名存在。

相反,您可以做的是绑定到User模型的model.beforeSave事件,并自己验证用户名:

public function boot() {

    \RainLab\User\Models\User::extend(function($model) {

        $model->bindEvent('model.beforeSave', function() use ($model) {
            $validator = \Validator::make($model->attributes, [
                'username' => 'required|alpha_dash|between:2,50',
            ]);

            if ($validator->fails()) {
                throw new \ValidationException([
                    'username' => 'Username must contain alphanumeric values only, and be between 2 and 50 characters in length',
                ]);
            }
        });

    });

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM