zend验证无法在populate中工作(编辑表单)

时间:2013-03-27 00:56:11

标签: php zend-framework

    UserController.php
    -------------

    editAction (method)
    ----------

    $UserInfo = array(
            'hdn_uid'=>$UserResult['user_id'],
            'username'=>$UserResult['user_name'],
            'firstname'=>$UserResult['first_name'],

        );

    $form->populate($UserInfo);
    $this->view->form = $form;


    Forms/userEdit.php
    ------------------

    $elementDecoration = array(
                'ViewHelper',
                'Description',
                'Errors',
                array(array('data'  => 'HtmlTag'), array('tag' => 'td')),
                array('Label', array('tag' => 'td', 'placement' => 'prepend')),
                array(array('row'   => 'HtmlTag'), array('tag' => 'tr')),
            );

    $hdn_id = new Zend_Form_Element_Hidden('hdn_uid');
            $hdn_id->addFilter('Int')
                   ->removeDecorator('label')
                       ->removeDecorator('HtmlTag');        

            $this->setName('login');
            $this->setDecorators($formDecoration);

            $username = new Zend_Form_Element_Text('username'); //Note this username and in conroller  $UserInfo arr 'username' matched so in the text fields existing username is populated from table.
            $username->setLabel('Username')
                    ->setDecorators($elementDecoration)
                    ->setRequired(true)
                    ->addFilter('StripTags')
                    ->addFilter('StringTrim');

$submit = new Zend_Form_Element_Submit('submit');
$submit->setDecorators($buttonDecoration);
$this->addElements(array($hdn_id,$username,$submit));

问题

   Server side validation not working, due to some mistake in the above snippet

详细信息

 Server side validation not working in the above code, when i clear the username and if i submited the button then program does not validated the field, instead it updated the empty value into table.

注意 这个代码适用于用户添加表单。但它无法用于编辑表格。

2 个答案:

答案 0 :(得分:0)

这几乎是在Zend Framework 1中处理表单的标准工作流程:

public function editAction(){
    //set up the form
    $form = new Application_Form_UserEdit();
    $form->setMethod('post');
    $form->setAction('/user/edit');
    //test for POST array
    if ($this->getRequest()->isPost()) {
        //validate form
        if ($form->isValid($this->getRequest()->getPost()) {
            //get validated and filtered form values
            $data = $form->getValues();
            //do some stuff
        } // if form not valid it should redisplay with current data automatically
    } else {
        //if not POST display empty form
        $this->view->form = $form;
    }
}

我希望这会有所帮助。

答案 1 :(得分:0)

这一行解决了我的问题

if($ form-> isValid($ this-> getRequest() - > getPost())