我試圖使用Zend\Validator
來驗證對象,但是我發現很難有幾個原因,現在想知道我是否在做一些根本性錯誤或者組件是不是一個不錯的選擇,這樣做......使用Zend Validator驗證對象
理想情況下,我想運行
$objectValidator = new ObjectValidator();
$objectValidator->isValid($object);
因此,在這種情況下,我會把(子)在ObjectValidator
的isValid()
方法驗證器爲對象的屬性,例如像這個:
public function isValid($value, $context = null)
{
$propertyValidator = new Zend\Validator\Callback(function($value) {
return false;
});
if (!$propertyValidator->isValid($value)) {
foreach ($propertyValidator->getMessages() as $code => $message) {
$this->abstractOptions['messages'][$code] = $message;
}
return false;
}
return true;
}
的方式,從酒店的驗證,我從組件EmailAddress
驗證器將依賴Hostname
驗證複製合併的消息。
當我使用兩種類型的驗證器(例如Callback
)時,不管是在同一個屬性上還是在不同的情況下,都會出現問題,因爲消息被合併,我失去了我想要的信息。我可以建立一種自己管理消息的方式,但我想知道是否沒有更好的解決方案。
我也想過使用Zend\InputFilter
而不是爲每個要運行檢查的屬性創建Zend\Input
。這樣,我當然可以得到所有的信息,但是在我驗證它之前,它會添加一個相當煩人的拆除對象的任務。
任何輸入高度讚賞。
@ pitty.platsch是否使用'InputFilter'類和建議的接口爲您解決問題? – Wilt
我同意。您應該使用'Zend \ StdLib \ Hydrator'從對象中提取數據並使用'Zend \ InputFilter \ InputFilter'來驗證數據。 Zend的Hydrators已經[支持不同的方式](http://framework.zend.com/manual/current/en/modules/zend.stdlib.hydrator.html#available-implementations)從對象中提取數據。 –