OctoberCMS用户插件如何拒绝保留名称

时间:2017-04-04 04:48:51

标签: octobercms

我正在使用User plugin

以下是关于如何拒绝用户名更改的previous question

我有一个我不想让人们使用的保留名称列表(例如admin,anonymous,guest)我需要放入一个数组并在注册时拒绝。

我的自定义组件' s Plugin.php

public function boot() {

    \RainLab\User\Models\User::extend(function($model) {

        $model->bindEvent('model.beforeSave', function() use ($model) {

            // Reserved Names List
            // Deny Registering if Name in List

        });

    });

}

我如何使用Validator?

2 个答案:

答案 0 :(得分:5)

我们可以使用Validator::extend():

创建验证规则
Validator::extend('not_contains', function($attribute, $value, $parameters)
{
    // Banned words
    $words = array('a***', 'f***', 's***');
    foreach ($words as $word)
    {
        if (stripos($value, $word) !== false) return false;
    }
    return true;
});

上面的代码定义了一个名为not_contains的验证规则 - 它在字段值中查找$words中每个单词的存在,如果找到则返回false。否则返回true表示验证已通过。

然后我们可以正常使用我们的规则:

$rules = array(
    'nickname' => 'required|not_contains',
);

$messages = array(
    'not_contains' => 'The :attribute must not contain banned words',
);

$validator = Validator::make(Input::all(), $rules, $messages);

if ($validator->fails())
{
    return Redirect::to('register')->withErrors($validator);
}

另请查看https://laravel.com/docs/5.4/validation#custom-validation-rules以了解如何在 OctoberCMS 中处理此问题。

答案 1 :(得分:2)

您可以抛出异常来执行该操作

public function boot() {

\RainLab\User\Models\User::extend(function($model) {

    $model->bindEvent('model.beforeSave', function() use ($model) {

        $reserved = ['admin','anonymous','guest'];

        if(in_array($model->username,$reserved)){
            throw new \October\Rain\Exception\ValidationException(['username' => \Lang::get('You can't use a reserved word as username')]);
        }

    });

});

}