Zend_Form - Попытка сделать простую, короткую форму ... почему я не получаю эти декораторы? - PullRequest
0 голосов
/ 30 сентября 2010

Все, что я хочу сделать, это создать форму в 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 ]

1 голос
/ 30 сентября 2010

Если вам удобно работать с представлениями, но вам также нужны функции проверки и фильтрации, вы все равно можете использовать 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 голос
/ 01 октября 2010

Это работает.Я адаптировал это из формы, которую я использую, поэтому застрял в нескольких других вещах, таких как идентификаторы, которые вы можете использовать, если хотите.В любом случае полезно посмотреть, как все это получается:

В моем контроллере:

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; ?>
0 голосов
/ 30 сентября 2010

Вот пример того, как я создаю 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()
...