我有一个显示公司详细信息的视图,我添加了该公司的订单列表(单独的模型和控制器)。一切正常,但是CGridView
用于显示订单列表的 是renderPartial()
从公司的控制器呈现 ( ) 的,因此,默认控制器CGridView
是company
而不是order
,这会导致所有自动生成的 URL,例如更新/删除按钮无效,因为它们是生成的/company/delete?id=
,它们应该引用order
控制器。我通过手动创建操作按钮的 URL 来解决这个问题:
$columns[] = array(
'class' => 'CButtonColumn',
'buttons' => array(
'delete' => array(
'label' => 'Download',
'url' => 'CController::createUrl("/order/delete", array("id"=>$data->id))',
'options' => array('class' => 'download'),
),
),
'template' => '{delete}',
);
但我不喜欢这种方法,因为这需要手动创建每个 URL。我尝试设置 的controller
字段CGridView
,但它是只读的。如何修改正在使用的默认控制器/模型CGridView
?
我还看到它CGridView
生成了一个带有元素 ID 的隐藏“键”div,并且这些键的update
URL 的控制器名称不正确,所以我真的需要以某种方式更改控制器CGridView
正在工作,因为我不想冒险更新条目在错误的控制器中。
编辑 我尝试创建控制器的实例并使用该实例来创建小部件:
$ctrl = Yii::app()->createController('order')[0];
$ctrl->widget('zii.widgets.grid.CGridView', $grid);
但是即使创建的小部件的所有者属性(只读)是好的(OrderController
),仍然使用实际路径(/company/
)而不是/order/
.