如何在Yii中创建没有参数名称的URL?

时间:2015-06-19 20:40:44

标签: php url yii url-parameters yii-routing

我正在使用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',
        ),
    ),
));

创建了一个包含每行三个链接的表:viewupdatedelete;例如(对于view):/index.php/foo/123,其中123是元素的ID(或主键值)。

现在我想修改小部件调用,以获得/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错误结束。

如何在网址中构建没有参数名称的链接?

其他信息 - 我在 /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>',
            ),
        ),
        ...
    ),
);

2 个答案:

答案 0 :(得分:0)

$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))',
            )
        ),
    ),
),
));

在/protected/config/main.php

    'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName' => false, 
        'rules'=>array(
                   '<controller:\w+>/<myId:\d+>'=>'<controller>/view',
        ),
    ),

将操作视图更改为

    public function actionView($myId){
      $model= User::model()->findByPk($myId);
       $this->render('view' , array('model' => $model));
    }

答案 1 :(得分:0)

当您有/index.php/bar/myid/123作为网址时,actionView的{​​{1}}必须以BarController(不是myid)作为参数。可能你有id因此导致问题。所以你需要像这样的actionView:

actionView($id)