Yii框架:控制器/操作URL和参数

18
在我的应用程序中,我有一个名为ApiController的控制器和其中的actionUsers方法,在YII框架中这个路径变成了api/users。现在,为了获取某些用户信息,我使用以下路径api/users/id/10,其中10是用户ID,路径中的id部分实际上是一个GET参数(api/users?id=10)。
有没有办法不使用路径中的id部分来完成同样的事情,即我希望我的路径看起来像api/users/10
谢谢!
3个回答

23

您需要在urlManager组件中添加规则模式:

Yii框架文档:url

您的配置应该像这样:

array(
    ......
    'components'=>array(
        ......
        'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                'api/users/<id>'=>'api/users',
            ),
        ),
    ),
);

你可以通过以下方式获取值:

$id = Yii::app()->getRequest()->getQuery('id');

Yii 没有隐式地为您执行此映射,这真是遗憾。对于 95% 的情况,/users/view/1/ 应该转到 UserController::view($id),而无需指示 Yii 进行此连接。 - Matt Eskridge

3
请尝试以下方法......
$id = Yii::app()->request->getParam('id');

能否这样做:如果用户传递了ID,则它应该进入操作,如果没有,则仍然在同一个操作中? - Ankita

0

除了@shiki的答案,你也可以这样做

array(
    ......
    'components'=>array(
        ......
        'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                'api/users/<id>'=>'api/users',
            ),
        ),
    ),
);

并且在行动中

public function actionUsers($id=null)  // argument variable should same as in urlmanager
    {
     echo $id;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接