我有一個Zend_Form子類。一些元素被設置爲屬於數組。如何ajaxify Zend_Form驗證
class My_Form extends Zend_Form {
public function __construct() {
$elem = $this->createElement('text','PROJECT_NAME',
array(
'required' => true
));
$elem->setBelongsTo('project');
$this->addElement($elem);
$elem = $this->createElement(
'text','PLANNED_END_DATE',
array(
'required' => true
)
);
$elem->setBelongsTo('project');
$elem->addValidator(new Zend_Validate_Date(array('format'=>'yyyy-MM-dd')));
$this->addElement($elem);
//and so on
}
}
我有一個通用的驗證控制器,將創建一個表單,並檢查錯誤,並以JSON格式返回他們:
class ValidateController extends Zend_Controller_Action
{
public function formAction()
{
$params = $this->_getAllParams();
if (isset($params['_frm'])) {
$formName = detect_the_form_class($params['_frm']);
if (class_exists($formName)) {
$form = new $formName();
if ($form instanceof Zend_Form) {
$result = $form->isValidPartial($params);
$messages = $form->getMessages();
$this->getResponse()
->setHeader('Content-Type', 'application/json')
->setBody(json_encode(array(
'result' => $result,
'messages' => $messages
)));
} else {
$this->getResponse()->setHttpResponseCode(500);
}
}
}
}
}
該控制器的偉大工程,對於非陣列形式,但形式我現在需要驗證hase數組,例如名稱爲'project [PROJECT_NAME]'的元素。
但$ form-> getMessages()返回以元素的基本名稱爲索引的消息,不帶數組前綴。
的實際結果是:
{ result: false,
messages: {
PROJECT_NAME: {isEmpty: "Value is required"},
PROJECT_END_DATE: {isEmpty: "Value is required"}
}
}
我需要的結果是:
{ result: false,
messages: {
"project[PROJECT_NAME]": {isEmpty: "Value is required"},
"project[PROJECT_END_DATE]": {isEmpty: "Value is required"}
}
}
或類似的東西,所以我能找到的確認消息的元素。
任何想法?
可能不利於你的問題,但你是不是在'類My_Form'父::結構()調用。通常'__construct()'中的代碼應該放在'init()'中。 – vascowhite 2012-08-14 20:54:58