Как заполнить Zend форму выбора элемента? - PullRequest
9 голосов
/ 13 августа 2010

Здравствуйте. Я искал его последние пару часов и прочитал все соответствующие результаты, которые Google может дать мне, но все еще не может заставить его работать.

Я создаю элемент выбора формы Zend через:

this->addElement('select','my_select', array( 
    'label' => 'Currency', 'value' => 'blue', 
    'multiOptions' => array( 'red' => 'Rouge', 'blue' => 'Bleu', 'white' => 'Blanc', ), ) );

Теперь я хочу заполнить его через

$form->populate

от контроллера, я попытался дать двухмерный массив, такой как

$vals = array("my_select" => array("US Dollar", "Pound Sterling")) 

, а затем датьэто в:

$form->populate($vals);

, но это не сработало, и я не уверен, сработает ли это, в настоящий момент я создаю свой массив, как в array( 'red' => 'Rouge', 'blue' => 'Bleu', 'white' => 'Blanc') того же класса, что и в форме zend, и затем передаю его вaddOlement multiOptions динамически, как этот парень предлагает здесь: http://zendguru.wordpress.com/2009/03/06/zend-framework-form-working-with-dropdownselect-list/, который работает, но я хотел бы получить его через заполнение, а также, если кто-то может подсказать мне, как выбрать значение по умолчанию, я буду очень признателен!

Спасибо,

Ответы [ 2 ]

10 голосов
/ 13 августа 2010

Метод заполнения позволяет вам «заполнить» форму значениями по умолчанию IE:

$form->populate(array("my_select" => "red"); 

Это установит для my_select «красный» в качестве выбранного.

EDIT

Что касается многомерного массива, я не совсем уверен, что вы пытаетесь сделать, хотите ли вы еще один оператор выбора или добавить эти элементы?Похоже, что это должен быть другой элемент select.

Если взглянуть больше на это, вам нужно установить, что выбрать со значениями из метода заполнения, это не вариант.Однако вы можете сделать что-то вроде этого:

$currency = new Zend_Form_Element_Select('currency', array(
       "label" => "Currency",
       "required" => true,
    ));
$currency->addMultiOptions(array(
        "US Dollar" => 1,
        "Pound Sterling" => 2,
    ));

$form->addElements(array($currency));

$form->populate(array("currency" => "US Dollar"));

И это добавит ваш оператор выбора валюты.И это должно настроить раскрывающийся список (массив значений может потенциально поступить из базы данных и т. Д.), А затем установить для доллара США значение по умолчанию с помощью метода заполнения.

3 голосов
/ 25 сентября 2012

Для таких, как я, которые собираются тратить часы своего драгоценного времени, БУДЬТЕ ОСТОРОЖНЫ! Если вы добавили фильтр в элемент select, вы должны быть на 100% уверены, что данные, передаваемые в populate (), содержат значения отфильтрованные . Если вы этого не сделаете, ваш выпадающий список не получит никакой выбранной опции! В моем случае у меня был элемент select со следующими параметрами:

'' => 'Choisir un pays',
'France' => 'France',
'Madagascar' => 'Madagascar',
'Maroc' => 'Maroc'

Но я также передал фильтр StringToLower элементу ... Если данные POST содержали значение «Мадагаскар», «Мадагаскар» передавался в функцию populate () и ничего не выбиралось ... Но из-за этого фильтра StringToLower я должен был передать «Мадагаскар»!

Короче говоря: будьте осторожны с фильтрами на выбранном элементе: populate () может быть нарушен .

Дополнительное редактирование: флажок с Int фильтром и value="0" будет установлен, если нет данных или нет данных не числовой строки передается populate() для этого поля ... Поскольку это флажок, я рекомендую избегать фильтра Int и использовать вместо него InArray validator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...