Форма Zend: Показать элементы, когда радио имеет правильное значение - PullRequest
2 голосов
/ 15 июня 2011

Я занят новым проектом, основанным на Zend Framework. Я создал следующую форму:

<?php
class Application_Form_User extends Zend_Form
{

    public function init()
    {
       $this->setMethod('post');
       $this->setAttrib('class','zf');
       $this->addElement('text', 'username', array(
        'label' => 'Gebruikersnaam:',
        'required' => true,
        'filters' => array('StringTrim'),
        'validators'=>array(
                array('Db_NoRecordExists',
                false,
                array(
                    'table'=>'user',
                    'field'=>'username'
                )
            ))
       ));
       $this->addElement('text', 'name', array(
        'label' => 'Volledige naam:',
        'required' => true,
        'filters' => array('StringTrim'),
       ));
       $this->addElement('text', 'email', array(
        'label' => 'Email:',
        'required' => true,
        'filters' => array('StringTrim'),
        'validators'=>array(
            'EmailAddress',
            array(
                'Db_NoRecordExists',
                false,
                array(
                    'table'=>'user',
                    'field'=>'email'
                )
            )
        )
       ));
       $this->addElement('password', 'password1', array(
        'label' => 'Wachtwoord:',
        'required' => true,
        'filters' => array('StringTrim'),
       ));
       $this->addElement('password', 'password2', array(
        'label' => 'Wachtwoord (controle):',
        'required' => true,
        'filters' => array('StringTrim'),
        'validators'=>array(array('Identical',false,'password1'))
       ));
       $this->addElement('radio','type',array(
            'label'=>'Gebruikers type:',
            'required'=>true,
            'multiOptions'=>array(
                'consumer'=>'Klant',
                'admin'=>'Beheerder'
            )   
        ));
       $this->addElement('text', 'mobile', array(
        'label' => 'Mobiel:',
        'required' => true,
        'filters' => array('StringTrim'),
       ));
        $this->addElement('textarea', 'address', array(
        'label' => 'Address:',
        'required' => true,
        'style'=>'width: 200px;height: 100px;'
       ));

       $this->addElement('submit', 'submit', array(
        'ignore'=>true,
        'label'=>'Toevoegen'
       ));
       $this->addElement('hash', 'csrf', array(
            'ignore' => true,
        ));

    }
}

В этой форме есть переключатель со значениями «Потребитель» и «Администратор». Я хочу, чтобы при значении «Потребитель» отображались дополнительные поля, а при значении «admin» - другие элементы.

Поэтому, когда значением является Consumer, я хочу в качестве примера те поля: Consumer ID, Consumer kvk number. Когда пользователь переключается на радиокнопку администратора, эти поля должны исчезнуть (поэтому это должно быть JS)

Есть ли способ сделать это в Zend Form "из коробки"? Или я должен сделать свою собственную форму HTML?

Tom

1 Ответ

1 голос
/ 15 июня 2011

Вы можете сделать что-то вроде этого:

public function init($data = false)
{
   if (isset($data['type']) && $data['type'] == 'consumer') {
      // add element or hide element
   }
}

В контроллере вы можете получить данные формы и передать их в форму ->init($data);

...