【问题标题】:Yii Embedding CHtml::listData into CGridYii 将 CHtml::listData 嵌入到 CGrid 中
【发布时间】:2013-06-03 04:38:25
【问题描述】:

我正在尝试构建一个表单,使用户能够更改多行的值,然后单击提交。我能够从数据库中检索行并将它们显示在表中。但是,而不是文本字段。我希望他们成为下拉列表。

$list 包含我想为每一行的下拉列表显示的选项。

我错过了什么?

<div class="row bottom">
        <?php 
            $list = CHtml::listData(Attendancetype::model()->findAll(), 'AttendanceTypeID', 'AttendanceTypeName');    
            print_r($list);

            $this->widget('zii.widgets.grid.CGridView', array(
                'dataProvider'=>  $model->search(),
                'columns'=>array(
                'CalendarDate',
                'GradeName',
                array(
                'value'=>'$data->TeacherFirstName . " " . $data->TeacherLastname',
                'header'=>'Teacher'
            ),
                array(
                'value'=>'$data->FirstName . " " . $data->LastName',
                'header'=>'Student'
            ),
                array(
                'value'=>$list,
                'type'=>'raw',
                'header'=>'Status'
            ),

            ),

            ));

        ?>
    </div>

当前错误消息。

PHP warning

call_user_func_array() expects parameter 1 to be a valid callback, array must have exactly two members

C:\wamp\www\yii\framework\base\CComponent.php(611)

599      * @since 1.1.0
600      */
601     public function evaluateExpression($_expression_,$_data_=array())
602     {
603         if(is_string($_expression_))
604         {
605             extract($_data_);
606             return eval('return '.$_expression_.';');
607         }
608         else
609         {
610             $_data_[]=$this;
611             return call_user_func_array($_expression_, $_data_);
612         }
613     }
614 }
615 
616 

【问题讨论】:

  • Yii 错误信息通常有一个调用栈。您是否有机会将错误消息缩小到代码中的一行?

标签: yii


【解决方案1】:

只是为了添加到以前的答案。如果要使用外部变量,则需要在 CColumn 中定义它。 所以你的代码看起来像:

$list = CHtml::listData(Attendancetype::model()->findAll(), 'AttendanceTypeID', 'AttendanceTypeName');
$this->widget('zii.widgets.grid.CGridView', array(
                'dataProvider'=>  $model->search(),
                'columns'=>array(
....
array('header'=>'Action',
     'type'=>'raw',
     'value'=> function ($data,$row) use $list {return CHtml::dropDownlist('actionList','', $list,array());}
       ),

这将像您需要的那样工作。与尼纳德的答案相同。 Cgridview 是最灵活的 yii 小部件,并且有很多 wiki 示例。

【讨论】:

    【解决方案2】:

    尝试在您的 cgridview 中执行此操作

     array('header'=>'Action',
         'type'=>'raw',
         'value'=>"CHtml::dropDownlist('actionList','', CHtml::listData(
                Attendancetype::model()->findAll(), 'AttendanceTypeID', 'AttendanceTypeName'),array())"
           ),
    

    【讨论】:

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