我在用着十月CMS基于 Laravel。
我正在尝试覆盖用户插件 onRegister()
功能。
之前的答案帮助我扩展了插件。
我想将用户名限制为字母数字alpha_dash
并限制为 50 个字符。
原来的函数在帐户.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';
}
});
});
});
}
Error
"Call to undefined method [loginAttribute]"
如果我删除 if 语句和 loginAttribute 并仅使用 $rules['username'],我仍然可以使用非字母数字字符注册名称。
我已经能够使用它扩展新代码,但不能覆盖现有代码。
我认为你不理解这里的页面循环。
rainlab.user.register
叫做after该用户已经注册。 IE。它们已经通过验证并且已经存在且用户名无效。
您可以做的就是绑定到 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',
]);
}
});
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)