2

我的应用程序是为使用 Yii 干净的 url 而编写的。urlManager 将 urlFormat 设置为路径,因此应用程序需要格式为“/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。

4

3 回答 3

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
于 2012-05-15T11:55:09.487 回答
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;
    }
于 2016-05-09T14:26:16.670 回答
0

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

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

于 2012-05-14T13:10:51.667 回答