我使用基于Laravel的OctoberCMS。
我试图覆盖Users Plugin scan_rev()
功能。
A previous answer helped me extend the plugin.
我想仅使用onRegister()
将用户名限制为字母数字,并限制为50个字符。
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 ['用户名'],我仍然可以使用非字母数字字符注册名称。
我已经能够使用此扩展新代码,但不能覆盖现有代码。
答案 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',
]);
}
});
});
}