2014-02-09 19 views
0

我有一個下拉列表,但我的文本值依賴於來自同一模型的另一個值。有條件的下拉列表Yii中的文本值

我想要發生的是,如果模型中的行的值爲client_type_id,那麼下拉文本應該是company_name,否則就是first_name。請參閱下面的代碼。

<?php echo $form->dropDownListRow($model , 'client_id', CHtml::listData(Client::model()->findAll(), 'id', '$data->client_type_id == 1 ? $data->company_name : $data->first_name')); ?> 

甚至有可能這樣做嗎?

回答

1

PHP 5.3+和Yii的1.1.13+

您可以使用匿名函數:

echo $form->dropDownListRow($model , 'client_id', 
    CHtml::listData(Client::model()->findAll(), 'id', function($data){ 
     return $data->client_type_id == 1 ? $data->company_name : $data->first_name 
    }) 
); 

Yii的< 1.1.13和/或PHP < 5.3

您可以使用CActiveRecord::afterFind()方法初始化一個變量,如$list_info並將其用作您的字段:

class MyClass extends CActiveRecord{ 
    public $list_info; 
    ... 

    public function afterFind(){ 
     $this->list_info=$this->client_type_id == 1 ? $this->company_name : $this->first_name 
    } 
} 

的下拉列表,然後變成

$form->dropDownListRow($model , 'client_id', CHtml::listData(
    Client::model()->findAll(), 'id', 'list_info') 
); 

參考:http://www.yiiframework.com/doc/api/1.1/CHtml#listData-detail

+0

謝謝,但是有1.1.12及以下,與PHP 5.2版本的方法嗎? – JohnnyQ

+0

我已經更新了答案。 – topher

+0

非常感謝!我還修改了您的示例以使其與上下文更加一致。 – JohnnyQ