簡體   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