Zend_Form - 试图制作一个简单的简短形式......为什么我没有得到这些装饰器?

时间:2010-09-30 07:17:59

标签: php zend-framework zend-form

我想做的就是在Zend Framework中创建一个如下所示的表单:

<p id="foo">
<form action="#" method="post">
<label>Start:</label> 
<input id="start" type="text" name="start" /> 
<label>End:</label> 
<input id="end" type="text" name="end" /> 
<input type="submit" name="submit" value="Submit" />
</form>
</p>

我根本做不到。 :(我可以坚持在这样的视图,但后来我没有得到验证和过滤。

有关如何找出装饰器和Zend_Form的任何提示?

3 个答案:

答案 0 :(得分:1)

如果您习惯使用视图但还需要验证和过滤功能,您仍然可以使用Zend Form。

class Default_Form_Search extends Zend_Form
{
  public function init()
  {
    $start = new Zend_Form_Element_Text('start');
    $start->setRequired(true)
      ->addValidator('Date', false, array('format' => 'YYYY-MM-dd'))
      ->setDecorators(array(
        array('ViewHelper')
      ));

    $this->addElement($start);

    // For end
  }
}

在您的控制器中:

$form = new Default_Form_Search;
$form->setAction('/search');

if ($this->getRequest()->isPost())
{
  if ($form->isValid($this->getRequest()->getPost())
  {
    // Search here
  }
  {
    var_dump($form->getMessages();
  }
}

$this->view->form = $form;

然后在您的视图中,您只需按原样形成HTML,但输出如下元素:

<p id="foo">
<form action="<?php echo $this->form->getAction() ?>" method="post">
<label>Start:</label> 
<?php echo $this->form->start ?>
<label>End:</label> 
<?php echo $this->form->end ?>
<input type="submit" name="submit" value="Submit" />
</form>
</p>

答案 1 :(得分:1)

这很有效。我已经从我正在使用的表格中对其进行了调整,因此我坚持使用ID等其他一些内容,如果您愿意,可以使用。无论如何,看看它们如何结合在一起很有用:

在我的控制器中:

private function _theForm() {
$form = new Zend_Form;
        $form->setAction('/controller/action')
                ->setMethod('post')
                ->addAttribs(array('id' => 'an_id_for_the_form'));

        $form->addElement('text', 'start', array(
            'validators' => array(
                'NotEmpty'
            ),
            'label' => 'Start:',
            'id' => 'someid',
            'required' => true,
            'decorators' => array(
                'ViewHelper',
                'Errors',
                'Label',
            ),
        ));
        $form->addElement('text', 'end', array(
            'validators' => array(
                'NotEmpty'
            ),
            'label' => 'End:',
            'id' => 'someotherid_if_you_like',
            'required' => true,
            'decorators' => array(
                'ViewHelper',
                'Errors',
                'Label',
                ),
        ));
        $form->addElement('submit', 'submitSomething', array(
            'label' => 'Submit',
            'decorators' => array(
                'ViewHelper',
            )
            ));

        $form->setDecorators(array(
            'FormElements',
            array('HtmlTag', array('tag' => 'p', 'id' => 'foo')),
            'Form',
        ));

        return $form;
}

然后我在控制器的其他地方调用,例如:

$form = $this->_theForm();
$this->view->form = $form;

然后你可以在你的视图中使用它,如:

 <?php echo $this->form; ?>

答案 2 :(得分:0)

以下是我如何创建Zend表单的示例:

class Mobile_Form_Login extends Zend_Form
{
    public function init()
    {
        $this->setName('authenticate');

        $nick = $this->createElement('text', 'nick');
        $nick->setRequired(true);
        $nick->addValidators(array(
            new Zend_Validate_StringLength(3, 10),
        ));

        $pass = $this->createElement('password', 'password');
        $pass->setAttrib('size', 10);
        $pass->setRequired(true);
        $pass->addValidators(array(
            new Zend_Validate_StringLength(6, 128),
        ));

        $this->addElements(array($nick, $pass));
    }
}

后来,在我的控制器中

$form = new Mobile_Form_Login();
if (!$form->isValid($_POST)) {
     // handle errors
}

// else render()