2017-03-31 110 views
0

我正在尝试添加自定义规则以形成。我在模型中添加了一个自定义函数,但它不适合我。在yii2模型中自定义验证

class BackendUser extends ActiveRecord implements IdentityInterface 
{ 
public function rules() 
{ 

    return [ 

     ['username','validateUsername','params'=>'username'=>'username']], 


    ]; 
} 

public function validateUsername($attribute, $params) 
{ 
    if (preg_match('/[^a-z])/i', $this->$attribute)) { 
     $this->addError($attribute, 'Username should only contain 
    alphabets'); 
    } 

}} 

回答

0

在PHP中有没有结构就像你在这里使用的(A => B => C,也许这是一个错字),你没有传递任何参数,因为反正你不使用它们验证方法。简单

public function rules() 
{ 
    return [ 
     ['username','validateUsername'], 
    ]; 
} 

就够了。

+0

without params此功能不起作用。 –

+0

什么?怎么来的?你没有使用它们。 – Bizley

+0

我做了内联function.now它的工作。 [ '用户名',函数($属性,$ PARAMS) { }, 'skipOnError'=>假], –

0

你的代码中很少有拼写错误。尝试在动态属性中使用$this->{$attribute},并且在调用内联验证时,params键应该是数组。

class BackendUser extends ActiveRecord implements IdentityInterface 
{ 
public function rules() 
{ 

return [ 
    ['username','validateUsername','params'=>['username'=>'username']], 
]; 
} 

public function validateUsername($attribute, $params) 
{ 
if (preg_match('/[^a-z])/i', $this->{$attribute})) { 
    $this->addError($attribute, 'Username should only contain alphabets'); 
    } 
} 
} 
+0

嗨,感谢您的回复。我试过你的代码。它不工作。 –