Я использую CGridView
для отображения таблицы данных:
/application/protected/views/foo/bar.php
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'my-grid',
'dataProvider' => $dataProvider,
'filter' => $model,
'columns' => array(
'myid',
...
array(
'class' => 'CButtonColumn',
),
),
));
Это создало таблицу с тремя ссылками для каждой строки: view
, update
и delete
; например (для view
): /index.php/foo/123
, где 123
— идентификатор (или значение первичного ключа) элемента.
Теперь я хочу изменить вызов виджета, чтобы получить разные ссылки на кнопки, такие как /index.php/bar/123
:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'my-grid',
'dataProvider' => $dataProvider,
'filter' => $model,
'columns' => array(
'myid',
...
array(
'class' => 'CButtonColumn',
'template' => '{view}{update}{delete}',
'buttons' => array(
'view' => array(
'url' => 'Yii::app()->createUrl("bar", array("myid" => $data->myid))',
)
),
),
),
));
Ссылка (просмотр), которую я получаю, выглядит так: /index.php/bar/myid/123
-- и запрос заканчивается ошибкой 404
.
Как строить ссылки без имени параметра в URL?
Дополнительная информация -- моя конфигурация маршрутизации в /application/protected/config/main.php
:
return array(
...
'components'=>array(
...
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
...
),
);
'url' => 'Yii::app()->createUrl("foo", array("id" => $data->myid))'
генерирует/index.php/foo/id/123
, а не/index.php/foo/myid/123
. Вы уверены, что все верно в вашем вопросе? - person hamed   schedule 20.06.2015