zf2 create select/drop down box and populate optio

2019-04-29 17:33发布

问题:

To Create a text input box I used folling code in zend framework2

use Zend\Form\Form;

class Loginform extends Form
{
    public function __construct()
    {
           $this->add(array(            
            'name' => 'usernames',
            'attributes' =>  array(
                'id' => 'usernames',                
                'type' => 'text',
            ),
            'options' => array(
                'label' => 'User Name',
            ),
        ));       
    }
}

and I can populate the values in controller action using

$form = new Loginform();
$form->get('usernames')->setAttribute('value', 'user 1');

Any idea how can I do the same for Selection/drop down box in zf2?

Ref: zend framework 2 documentation

回答1:

Check the API (the docs are terrible, so check the code).

Use the Zend\Form\Element\Select class and set the options attribute like so:

$element->setAttribute('options', array(
    'key' => 'val',
    ...
));

Output the element using the FormRow or FormSelect view helper.

This site is also a good source for examples and information: http://zf2.readthedocs.org/en/latest/modules/zend.form.quick-start.html

Example:

$this->add(array(     
    'type' => 'Zend\Form\Element\Select',       
    'name' => 'usernames',
    'attributes' =>  array(
        'id' => 'usernames',                
        'options' => array(
            'test' => 'Hi, Im a test!',
            'Foo' => 'Bar',
        ),
    ),
    'options' => array(
        'label' => 'User Name',
    ),
));    

You can also assign the options in the controller if you need to, as shown above.



回答2:

$form = new Loginform();      
$form->get('usernames')->setValueOptions($usernames );

$usernames is an array

Ref Click Here



回答3:

Zend Framework 2.2 , select options have been moved into 'options' instead of 'attributes' so above code will be changed too

$this->add(array(     
    'type' => 'Zend\Form\Element\Select',       
    'name' => 'usernames',
    'attributes' =>  array(
       'id' => 'usernames'              
    ),
    'options' => array(
        'label' => 'User Name',
        'options' => array(
            'test' => 'Hi, Im a test!',
            'Foo' => 'Bar',
        ),
    ),
));


回答4:

If you want to do it in controller then do it like this way

$form->get('ELEMENT_NAME')->setAttribute('options' ,array('KEY' => 'VALUE'));