2017-04-04 17 views
1

我正在使用User pluginOctoberCMS用户插件如何拒绝保留名称

这是我的previous question关于如何拒绝用户名更改。

我有一个保留名称列表,我不希望人们使用(如管理员,匿名,客人)我需要放入一个数组并拒绝注册。

我的自定义组件的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 

     }); 

    }); 

} 

我会怎么做,使用验证?

回答

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')]); 
     } 

    }); 

}); 

}

+0

我相信它是工作。这简化了过程。 –

+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处理这个。

+0

我在维护模式的网站,而在发展,但我可以看到它,而在后台记录。当我扩展验证器并将其放入boot()时,它将我锁定在后端并进入维护模式页面。 –

+0

我把它放在关于规则的模型中。我得到错误“分析错误:语法错误,意外'验证'(T_STRING),期望函数(T_FUNCTION)”。我如何在模型中包含验证器?我试过'使用Validator'和'使用Illuminate \ Validation \ Validator'。 –

+0

检查https://laravel.com/docs/5.4/validation#custom-validation-rules –