【问题标题】:CHtml::listData with a complex $textFieldCHtml::listData 具有复杂的 $textField
【发布时间】:2012-03-30 19:44:32
【问题描述】:

我想使用模型中的几个属性作为textField。像这样的:

$form->dropDownList(
    $formModel, 
    'ref_attribute', 
    CHtml::listData(
        User::model()->findAll(array('order'=>'attribute1 ASC, attribute2 ASC')), 
        'id', 
        'attribute1 attribute2 (attribute3)'), 
    array()
);

以便'attribute1 attribute2 (attribute3)' 自动转换为正确的属性值。我尝试“按原样”编写它 ('attribute1 attribute2 (attribute3)'),并在模型中创建一个中间函数 (fullName()),但似乎没有任何效果。

提前致谢。

【问题讨论】:

    标签: php yii yii-components


    【解决方案1】:

    可以通过在 Model 类中创建一个额外的方法来实现。您必须创建一个 getter 并将其 with the yii magic 用作普通属性。

    所以你的模板中有:

    $form->dropDownList(
        $formModel, 
        'ref_attribute', 
        CHtml::listData(
            User::model()->findAll(array('order'=>'attribute1 ASC, attribute2 ASC')), 
            'id', 
            'fullName'), 
        array()
    );
    

    在您的模型中:

    public function getFullName()
    {
        return $this->attribute1.' '.$this->attribute2.' ('.$this->attribute3.')';
    }
    

    【讨论】:

      【解决方案2】:

      如果您的 PHP 版本高于 5.3,那么您可以使用匿名函数:

      $form->dropDownList(
          $formModel, 
          'ref_attribute', 
          CHtml::listData(
              User::model()->findAll(array('order'=>'attribute1 ASC, attribute2 ASC')), 
              'id', 
              function($model){
                  return $model->attribute1.' '.$model->attribute2.' ('.$this->attribute3.')';
              }
          ), 
          array()
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多