Динамические attributes для форм

Возник вопрос по поводу создания форм. В своем проекте я использую формы со всяческими видами ввода: select’ы, texarea, radio, text. Когда писал функционал с нуля без использования фреймворков записывал варианты для radio и select в отдельные поля БД. Начал копать как это реализовать в Yii - наткнулся на методы activeDropDown(), activeDropDownList(), activeRadioButton() класса CHtml. Вот только в примерах варианты(пары переменная-значение) задаютсья статически прямо в представлениях.

Что мне нужно - создать эти варианты еще в модели при том желательно тоже не статически а чтобы они брались откуда-то с БД. Существует ли для этого функционал в Yii или нужно дописывать что-то свое?

а в чем собственно проблема-то? activeDropDownList принимает массив параметров, так же как и activeRadioButtonList. в модели получить из бд массив

$sql = ‘SELECT * FROM USERS’;

$command = $this->dbConnection->createCommand($sql);

$users = $command->queryAll();

и затолкать его в DropDownList.

смотри, допустим у меня есть те же tbl_users с полями id, name, surname и т.д.

И тут момент когда мне нужно организовать для tbl_users DropDownList(html select) и его ты не можешь записать просто в БД, скажем через запятую. Тут уже нада будет парсить. Либо как вариант для него создать отдельную таблицу в БД и с нее уже брать значения. Мой вопрос был в том придумать самому механизм работы этих Select’ов и radio button’ов или в yii это уже придумано и это можно сделать штатными методами?

Извините но не совсем понятно что вы хотите сказать. Попробуйте перефразировать вопрос или описать задачу поподробнее.

Скажем у меня есть форма для модели User с разными типами данных. Допустим в ней есть поля: id, name, surname, age, country. Создавая таблицу в БД для даной модели я задам тип для name, surname - varchar или text - и в представлении получу <input type=‘text’> или <textarea> соответственно. А age и country я хочу организовать в виде <select> т.е. activeDropDownList в Yii. Понятно что я бы мог просто их записать в БД в виде текста, но не хочу чтобы пользователь вводил страну вручную, я хочу чтобы он выбрал ее из списка. Так вот вопрос состоит в том как хранить значения для country в БД и как указать Yii чтобы он их использовал. Тут вариант либо создавать отдельную таблицу с этими вариантами, либо писать эти варианты прямо в поле таблицы, скажем через запятую, а в еще одном поле этой же таблицы записывать выбранный вариант. Т.е. будет табличка типа:


ID | name | surname | Age | CountryVars | SelectedCountry

1     tt    ololo      1    one,two,three     two

Либо держать отдельную таблицу с этими вариантами а в нашу табличку писать только ID елемента.

Это все реализовывать собсвенным кодом или в Yii это уже есть? Смотрел api - не нашел.

Конечно нужно хранить страны в отдельной таблице Countries, создав соответствующий класс Active Record.

В activeDropDownList() нужно будет передать модель User, имя атрибута ("selectedCountry") и listData(Countries::model()->findAll(), "id", "name").

понял, спасибо за помощь ;)

Гораздо понятнее :rolleyes:

Age лучше организовать как простое поле ввода <input />, вставить просто проверку на целое число и диапозитив 0 < Age < 120.

А country лучше через базу данных. Отдельная таблица для стран. В таблице Users хранить id.

[html]<div class="simple">

<?php echo CHtml::activeLabelEx($model,‘country’); ?>

<?php

// отобразить список стран


&#036;criteria=new CDbCriteria;


&#036;criteria-&gt;order = 'name';


&#036;country = country::model()-&gt;findAll(&#036;criteria);


&#036;arr_country = array(0=&gt;'Укажите страну.'); // пункт меню по умолчанию


foreach (&#036;country as &#036;i) { &#036;arr_country[&#036;i-&gt;id] = &#036;i-&gt;name; }


echo CHtml::activeDropDownList(&#036;model,'country', &#036;arr_country);

?>

</div>[/html]

PS Выборку стран из базы делать в отображении, как я сделал, не кашерно. Лучше перенести это в контроллер.