![](/img/trans.png)
[英]How to make plugin components function available as Rest API in OctoberCMS?
[英]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.