【问题标题】:Yii not detecting camel case actionsYii 没有检测到骆驼案行动
【发布时间】:2015-08-18 09:47:39
【问题描述】:

如果我声明这样的动作,Yii 会给我404 Error

站点控制器.php

public function actionRegisterUser()

这就是我在main.php中的称呼

 ['label' => 'Register User', 'url' => ['/site/RegisterUser']],

我尝试了几种不同的组合。唯一可行的组合是这两个地方的命名约定:

 public function actionRegisteruser

 'url' => ['/site/registeruser']

我曾经在另一个 Yii 项目(Yii 1.0)上工作,我可以用驼峰式命名我的动作并毫无问题地调用它们。 我是否需要开启某种设置才能做到这一点

我也试过玩控制器的rules,但没有解决任何问题。

【问题讨论】:

    标签: php yii yii2 camelcasing


    【解决方案1】:

    在某些情况下,您需要驼峰式链接。例如,出于 SEO 目的(保留入站链接)。您可以在 Web 服务器端创建重写规则或将内联规则添加到应用端的 URL 管理器。示例:

    'urlManager' => [
        'rules' => [
            '<controller:RegisterUser>/<action:\w+>'=>'register-user/<action>',
        ],
    ],
    

    还可以编写自定义URL rule。示例:

    namespace app\components;
    
    use yii\web\UrlRuleInterface;
    use yii\base\Object;
    
    class CarUrlRule extends Object implements UrlRuleInterface
    {
    
        public function createUrl($manager, $route, $params)
        {
            if ($route === 'car/index') {
                if (isset($params['manufacturer'], $params['model'])) {
                    return $params['manufacturer'] . '/' . $params['model'];
                } elseif (isset($params['manufacturer'])) {
                    return $params['manufacturer'];
                }
            }
            return false;  // this rule does not apply
        }
    
        public function parseRequest($manager, $request)
        {
            $pathInfo = $request->getPathInfo();
            if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches)) {
                // check $matches[1] and $matches[3] to see
                // if they match a manufacturer and a model in the database
                // If so, set $params['manufacturer'] and/or $params['model']
                // and return ['car/index', $params]
            }
            return false;  // this rule does not apply
        }
    }
    

    并在 [[yii\web\UrlManager::rules]] 配置中使用新的规则类:

    [
        // ...other rules...
    
        [
            'class' => 'app\components\CarUrlRule', 
            // ...configure other properties...
        ],
    ]
    

    【讨论】:

      【解决方案2】:

      您需要像 ['/site/register-user'] 这样指定您的操作。正如documentation 所说的内联操作

      index 变为 actionIndexhello-world 变为 actionHelloWorld

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 2015-07-07
        • 2014-09-14
        • 1970-01-01
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        相关资源
        最近更新 更多