2010-02-01 38 views
1

我使用Zend MVC框架以及用Propel生成的ORM圖層,我試圖找出從Propel對象的save()函數中捕獲異常的最佳方法,並拋出他們以Zend表格作爲錯誤。Zend框架中的表單級別驗證

並非所有來自Propel對象的異常都有一種方法來確定哪個字段導致錯誤,所以我想知道是否有一種方法可以將通用錯誤消息添加到整個表單中,而不是被迫將每個錯誤消息附加到特定的表單元素。

例如,我有一個保存()調用包裝在try/catch塊,我可以添加exception->的getMessage()的表單元素的錯誤:

try { 
    $obj->save(); 
    echo 'object saved successfully'; 
} catch (Exception $e) { 
    $form->name->addErrorMessage($e->getCode()." - ".$e->getMessage()); 
    $form->name->markAsError(); 
    $form->populate($formData); 
} 

但我想要能夠做這樣的事情:

try { 
    $obj->save(); 
    echo 'object saved successfully'; 
} catch (Exception $e) { 
    $form->addErrorMessage($e->getCode()." - ".$e->getMessage()); 
    $form->markAsError(); 
    $form->populate($formData); 
} 

我希望是有道理的,感謝您的幫助,

戴夫

回答

1

您是否正在考慮來自數據庫或Propel驗證層的錯誤(它的開發並不那麼多,並且在步驟save()中默認不使用)?

如果要使用數據庫錯誤,請記住,它們只會返回第一個錯誤(因此,如果用戶輸入三個錯誤,則必須提交四次)。此外,從錯誤消息can be hard中獲取字段名稱。請記住,有些鍵覆蓋多個字段(「namefirst_name的組合必須是唯一的」)。

這就是爲什麼例如Symfony在表單層添加驗證的原因。在那裏,您可以一次檢查所有字段,並返回多個錯誤。但是,也許你已經這樣做了,只想把它作爲最終檢查?

+0

我可以使用Zend檢查表單圖層中的所有字段,但是我仍然想要將Propel錯誤作爲最終檢查進行冒泡。理想情況下,我將把可能從Propel返回的所有可能的錯誤合併到Zend中的表單層中,但現在我只想阻止表單提交到一個討厭的PHP錯誤頁面。 我將不得不做一些研究,找出在Zend_Form中唯一的關鍵約束錯誤的最佳方法。謝謝你的幫助, – 2010-02-02 15:00:17