У меня есть представление с информацией о компании, и я добавил список заказов, сделанных этой компанией (отдельная модель и контроллер).Все работает, однако 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
генерирует скрытый div 'keys' с идентификаторами элементов, и эти ключи имеют update
URLс неправильным именем контроллера, поэтому мне действительно нужно как-то изменить контроллер, над которым работает CGridView
, так как я не хочу рисковать, обновляя записи в неправильных контроллерах.
Редактировать Iпопытался создать экземпляр контроллера и использовать его для создания виджета:
$ctrl = Yii::app()->createController('order')[0];
$ctrl->widget('zii.widgets.grid.CGridView', $grid);
Но хотя свойство владельца (только для чтения) созданного виджета является хорошим (OrderController
), URL-адреса действийвсе еще генерируются с фактическим путем (/company/
) вместо /order/
.