2015-07-24 3 views
0

В приложении Yii у меня есть модели User и Expert ('expert'=>array(self::BELONGS_TO, 'Expert', 'expert_id'),).Как сделать Yii-CActiveForm не выбран элемент списка?

Существует форма для создания/редактирования пользовательских данных. Теперь я хочу, чтобы расширить его с помощью раскрывающегося списка:

<?php 
/** 
* @var $experts Expert[] 
*/ 
$expertsDropDownListData = array(); 
foreach ($experts as $expert) { 
    $expertsDropDownListData[$expert->id] = $expert->name; 
} 
?> 
<div class="row"> 
    <?php 
    echo $form->labelEx($user, '', array('label' => Yii::t('app', 'Some text...'))); 
    ?> 
    <?php 
    echo $form->dropDownList(
     $user, 'expert[id]', $expertsDropDownListData, 
     array(
      'empty' => Yii::t('app', 'Please select an expert.'), 
      // 'options' => array('' => array('selected' => 'selected')), 
      // 'prompt'=>'Choose One', 
     ) 
    ); 
    ?> 
    <?php echo $form->error($user, 'expert[id]'); ?> 
</div> 

Я хочу выпадающий список никогда не иметь экспертную запись как запись ульда по умолчанию. На странице load alwys пустое значение должно быть «выбрано». Он работает на страницах пользователей, у которых нет соответствующего эксперта (в таблице users столбец expert_id равен NULL). Но на страницах пользователя, у которых есть эксперт, экспертная запись пользователя получает selected.

Как разрешить объект CActiveForm выбрать antry и отобразить форму без предварительного selected значение независимо от отношений между таблицами и объектами?

ответ

1

Вы можете заполнить атрибут $ model-> expert с нулевым значением после загрузки.

// Controller 
$user = User::model()->findByPk(1); 
...your awesome code here... 

// never show a default value 
$user->expert=null; 

if(isset($_POST)) { 
    // $user->expert will be set here with data from view 
    $user->attributes = $_POST; 
} 

...

// View 
    <div class="row"> 
    <?php 
    echo $form->labelEx($user, '', array('label' => Yii::t('app', 'Some text...'))); 
    ?> 
    <?php 
    echo $form->dropDownList(
     $user, 'expert', CHtml::listData($experts,'id', 'name'), 
     array('empty' => Yii::t('app', 'Please select an expert.'),) 
    ); 
    ?> 
    <?php echo $form->error($user, 'expert'); ?> 
    </div> 
+0

Спасибо за ваш ответ! Это рабочее решение, +1 для него, но на самом деле это всего лишь обходной путь. Я думаю, что «разрушение» объекта не является действительно чистым подходом. – automatix