![](/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.