当Yii urlManager将urlFormat设置为'path'时,如何解析GET样式参数?

时间:2012-05-14 10:37:52

标签: url yii

我的应用程序是为了使用Yii clean urls而编写的。 urlManager将urlFormat设置为path,因此应用程序需要“/ home / login / 12”形式的参数。

我的问题是我正在使用第三方API类,它希望以“/ api / login?user_id = 12& foo = 234234& bar = xyzzy”的形式进行回调。这些参数在$ _GET中不可用,因为Yii不会将它们解释为单独的参数。

如何告诉urlManager为这个控制器使用 get urlFormat?

更新:

urlManager的配置选项:

'urlManager'=>array(
    'urlFormat'=>'path',
    'rules'=>array(
        // Other paths
        '/' => 'home/index',
        '<controller:\w+>/<id:\d+>'=>'<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
        '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
    ),
),

我的测试查询字符串:

http://localhost/testcontroller/testaction?id=x&blah=y
http://localhost/testcontroller/testaction/?id=x&blah=y

我正在使用Yii版本1.1.10.r3566。

3 个答案:

答案 0 :(得分:1)

正如dInGd0nG所指出的,我们的重写规则存在问题。

他们是这样的:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?req=$1

什么时候应该这样:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule . index.php

答案 1 :(得分:1)

事实上。我使用Nginx并遇到了同样的问题。事实证明我的原始nginx设置是错误的:

    location / {
            # Redirect everything that isn't a real file to index.php
            try_files $uri $uri/ /index.php?r=$uri;
    }

我将其更改为以下内容并显示参数。

    location / {
            # Redirect everything that isn't a real file to index.php
            try_files $uri $uri/ /index.php?r=$uri&$args;
    }

答案 2 :(得分:0)

“如何告诉urlManager为这个控制器使用get urlFormat?”

您最好的选择可能是覆盖UrlManager和createUrl / parseUrl函数,以便您可以以自己的自定义方式处理这一条路径。