2013-08-14 2 views
1

У меня есть выпадающий список, который является обязательным в модальном. используя код ниже:Как сохранить выпадающее меню после публикации страницы в YII?

public function getYears() 
{ 
    for ($i=date('Y');$i>=2012;$i--) 
    { 
      $years["{$i}"]="{$i}"; 
    } 
    return $years;     
} 

и мой взгляд является:

<div class="row"> 
<?php echo $form->labelEx($model,'year'); ?> 
<?php echo CHtml::activedropDownList($model,'years',$model->getYears(),array('class'=>'myClass')); ?> 
<?php echo $form->error($model,'year'); ?> 

<?php echo $form->labelEx($model,'name'); ?> 
<?php 
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'name'=>'name', 
'source'=>$this->createUrl('reports/autocompleteTest'), 
'options'=>array(
     'delay'=>300, 
     'minLength'=>2,  
     'showAnim'=>'fold', 
), 
)); 
?> 
    <?php echo $form->error($model,'name'); ?> 

    <?php echo $form->labelEx($model,'Status'); ?> 
    <?php echo $form->dropDownList($model,'is_active',array("1"=>"Active","0"=>"InActive")); ?> 
    <?php echo $form->error($model,'Status'); ?> 

    </div> 
<div class="summary_btn buttons"> <?php echo CHtml::submitButton('Search'); ?> </div> 
<?php $this->endWidget(); ?> 

Теперь, когда я нажимаю на кнопку Search, моя страница делает запись обратно. И он перепечатывает раскрывающийся список.

Я не знаю, как сохранить выбранное значение в раскрывающемся списке после нажатия кнопки.

+0

означает, что вы хотите получить выбранный выбор после обновления страницы также ?? – Ninad

+0

@Ninad да, я хочу сохранить значение. –

ответ

1

Вы должны setAttributes вашей модели от $_POST, так Yii будет переназначать значения модели для формирования компонентов, так же, как с моделями экономии, но без сохранения:

public function someAction() 
{ 
    // load model somewhere 
    $model = $this->_loadModel(); 
    if($_POST['modelName']) 
    { 
     $model->setAttributes($_POST['modelName']); 
    } 
    $this->render('someView', ['model' => $model]); 
} 

EDIT:

После комментариев Я заметил, что у вас есть ваша модель с методом getYears, который Yii использует как getter для атрибута years, как explained in getters and setters tutorial. Вы должны переименовать его, например, getYearRanges. И убедитесь, что в вашей модели есть атрибут years, чтобы сохранить текущее значение years, и у вас есть правило in HarryFink answer.

+0

где мне нужно реализовать этот код? на кнопках (поиск) щелкните или в другом месте. –

+1

В действии контроллера. Не забудьте установить атрибут в безопасное (или применить какое-либо правило проверки) в ваших моделях модели или setAttributes не будет работать. – HarryFink

+0

Вы добавили это в свой поиск '' '' '' 'или '', что бы вы ни называли' 'postback'. Спасибо Гарри за ваш комментарий, очень важно иметь хотя бы «безопасное» правило. –

2

В действии:

$model->setAttributes($_POST[get_class($model)]); 

В модели:

function rules(){ 
    return array(
     //other rules 
     array('years', 'safe'), //or any other validation 
    ) 
} 
+0

, получив следующую ошибку: «Свойство« Users.years »только для чтения.» –

+0

Да, потому что у вас есть метод getYears() на вашей модели. Переименуйте его что-то вроде: getYearOptions() – HarryFink