Yii2 提供了一套完善的參數校驗規則,但有時可能不滿足實際需求,需要我們自定義規則,這裏簡單介紹下自定義規則的使用。
比如有個參數 country ,只能接收 'USA', 'Web',其餘校驗不通過,代碼如下:
public $country;
public function rules()
{
return [
// 自定義validateCountry()方法校驗規則
['country', 'validateCountry'],
];
}
public function validateCountry($attribute, $params)
{
if (!in_array($this->$attribute, ['USA', 'Web'])) {
$this->addError($attribute, 'The country must be either "USA" or "Web".');
}
}
常見問題:自定義規則失效。
按上述代碼其實有個規則失效問題,當參數爲空的時候或者已經在其他驗證中失效的情況下,是不走validateCountry() 方法的。
這時可以加上參數 skipOnEmpty 和 skipOnError 設置爲 false。
代碼如下:
public $country;
public function rules()
{
return [
// 自定義validateCountry()方法校驗規則
['country', 'validateCountry', 'skipOnEmpty' => false, 'skipOnError' => false],
];
}
public function validateCountry($attribute, $params)
{
if (!in_array($this->$attribute, ['USA', 'Web'])) {
$this->addError($attribute, 'The country must be either "USA" or "Web".');
}
}