2014-12-31 43 views
0

考慮這個代碼模型中:在Yii 2中使用規則方法中其他類的過濾器?

public function rules() { 
    return [ 
     [['company_name', 'first_name', 'last_name'], 'sanitize'], 
     //........ 
    ]; 
} 

sanitize是當前類中的自定義的方法,該方法是:

public function sanitize($attribute) { 
    $this->{$attribute} = general::stripTagsConvert($this->{$attribute}, null, true); 
} 

現在這種方法顯然會派上用場,在衆多車型,所以我不要不想在每個模型中重複相同的代碼。有沒有一種方法可以引用規則中的另一個類來代替綁定到當前類的當前sanitize方法名稱?

回答

1

是的,這絕對有可能。

創建單獨的驗證程序。假設它被稱爲SanitizeValidator並放置在common/components文件夾中。

您的自定義驗證器必須從框架基礎驗證器擴展並覆蓋validateAttribute()方法。把你的邏輯這個方法裏面:

​​

然後在模型就可以把這個驗證程序是這樣的:

use common/components/SanitizeValidator; 

/** 
* @inheritdoc 
*/ 
public function rules() 
{ 
    return [ 
     [['company_name', 'first_name', 'last_name'], SanitizeValidator::className()], 
    ]; 
} 

檢查有關自定義的官方文檔驗證器herethere

+0

但它不是一個驗證器,它是一個過濾器,所以我需要返回數據,以便它可以分配給正確的屬性。這是否會正常工作? – Brett

+0

是的。例如,您可以看到如何實現內置的DefaultValueValidator。它也比驗證器更過濾器(我認爲它被稱爲像只是爲了一致性)。在這種情況下,它只是設置默認值,如果它沒有被用戶填充。 – arogachev

+0

所以我只是做'return $ this - > $ attribute = general :: stripTagsConvert($ this - > $ attribute,null,true);'它會更新模型中正確的屬性名稱? – Brett

相關問題