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

时间:2017-03-10 14:57:23

标签: php laravel laravel-5 octobercms

我使用基于Laravel的OctoberCMS

我试图覆盖Users Plugin scan_rev()功能。

A previous answer helped me extend the plugin.

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

Account.php

中的原始功能
alpha_dash

我的覆盖

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

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

错误

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';
                }

            });
        }); 
    }); 
}

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

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

1 个答案:

答案 0 :(得分:4)

我认为你不了解这里的页面循环。

rainlab.user.register在用户注册后被称为。即他们已经通过验证,并且已经存在无效的用户名。

您可以做的是绑定到用户模型的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',
                ]);
            }
        });

    });

}