【问题标题】:Yii2 Clean URLs & Action ParametersYii2 Clean URLs & Action 参数
【发布时间】:2015-01-07 09:09:26
【问题描述】:

我在 Yii2 应用程序上启用了干净的 URL,但我似乎无法获取要传递给操作的参数。

我希望这样:

localhost/app/web/a/b/c/d

映射到以下内容:

AController->actionB($c, $d)

这没有发生。

这是我的 .htaccess:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php

我的web.php的相关部分:

'urlManager' => [
                'class' => 'yii\web\UrlManager',
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => array(
                        '<controller:\w+>/<id:\d+>' => '<controller>/view',
                    '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                    '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
                ),
        ],

【问题讨论】:

    标签: yii2 clean-urls yii-url-manager


    【解决方案1】:

    如果您期待以下 URL。

    localhost/app/web/a/b/c/d

    映射到以下内容:

    AController->actionB($c, $d)

    你可以像下面的例子一样指定 main.php。

    您必须像我在下面的示例中提到的那样设置 URL 规则。它应该可以工作。

    'urlManager' => [
                    'class' => 'yii\web\UrlManager',
                    'enablePrettyUrl' => true,
                    'showScriptName' => false,
                    'rules' => [
                            '<controller:\w+>/<action:\w+>/<id:\d+>/<id:\d+>' => 'a/b/c/d'
                    ],
            ],
    

    如果您还有任何疑问,请告诉我。

    【讨论】:

    • 嗨,我有类似的问题。当我使用您的代码时,我有:'preg_match():编译失败:两个命名的子模式在偏移量 55 处具有相同的名称'。当我将 / 更改为 / 我有:'无法解析请求“a/b/c/d”'
    【解决方案2】:

    据我了解,规则应该类似于:

    '<controller:\w+>/<action:\w+>/<c>/<d>' => '<controller>/<action>'
    

    所以如果你尝试访问localhost/app/web/a/b/c/d,Yii 会调用:

    class AController extends Controller
    {
        public function actionB($c, $d)
        {
        }
    }
    

    【讨论】:

      【解决方案3】:

      我为你的 urlManager 建议以下规则:

      'rules' => [
          '<a:\w+>/<b:\w+>/<c:\d+>/<d:\d+>' => 'a/b'
      ],
      

      寻址到localhost/a/b/c/d 现在应该需要在控制器 a 内使用参数 cd 执行操作 b .

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-26
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        • 2015-06-18
        • 2012-12-20
        • 2013-09-26
        • 1970-01-01
        相关资源
        最近更新 更多