2017-03-31 179 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

嗨,感謝您的回覆。我試過你的代碼。它不工作。 –