1

我有一个下拉列表,但我的文本值取决于来自同一模型的另一个值。

我想要发生的是,如果模型中的行的client_type_id值是 ,1那么下拉文本应该company_namefirst_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')); ?>

甚至有可能实现这样的目标吗?

4

1 回答 1

2

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()方法来初始化变量 say$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

于 2014-02-09T08:07:46.950 回答