• yii2 控制器里 action 大小写组合造成的路由问题


    yii1中, 若存在如下控制器

    class BindController extends CController {
    
        public function actionGetMobilePhone () {
            // some code...
        }
    
    }

    那么, 通过访问 http://your-domain-name/bind/getMobilePhone  就可以访问到

    以上代码如果在yii2中, 访问的时候, 就需要 http://your-domain-name/bind/get-mobile-phone 通过这种方式来访问, 因为yii2中改写了 createAction 方法

    yii1中的 createAction 

        public function createAction($actionID)
        {
            if($actionID==='')
                $actionID=$this->defaultAction;
            if(method_exists($this,'action'.$actionID) && strcasecmp($actionID,'s')) // we have actions method
                return new CInlineAction($this,$actionID);
            else
            {
                $action=$this->createActionFromMap($this->actions(),$actionID,$actionID);
                if($action!==null && !method_exists($action,'run'))
                    throw new CException(Yii::t('yii', 'Action class {class} must implement the "run" method.', array('{class}'=>get_class($action))));
                return $action;
            }
        }

    yii2中的 createAction

        public function createAction($id)
        {
            if ($id === '') {
                $id = $this->defaultAction;
            }
    
            $actionMap = $this->actions();
            if (isset($actionMap[$id])) {
                return Yii::createObject($actionMap[$id], [$id, $this]);
            } elseif (preg_match('/^[a-z0-9\-_]+$/', $id) && strpos($id, '--') === false && trim($id, '-') === $id) { // 这里就是判断 $id 即方法名的格式
                $methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $id)))); // 这里就是重组方法名
                if (method_exists($this, $methodName)) {
                    $method = new ReflectionMethod($this, $methodName);
                    if ($method->isPublic() && $method->getName() === $methodName) {
                        return new InlineAction($id, $this, $methodName);
                    }
                }
            }
    
            return null;
        }

    红色的注释就是yii1 与 yii2 中组合方法名的区别,  yii1中只是简单的组合.

  • 相关阅读:
    wsl 如何去掉 windows 的环境变量
    wget出现Unable to establish SSL connection
    openssh 升级
    element/JS文件上传和下载excel问题
    mysql操作过程中常见问题汇总
    [VB.NET Tips]线程传递参数四种方法
    主路由拨号_openwrt做旁路由_ipv4端口映射的设置
    Openwrt_Linux_crontab任务_顺序执行脚本
    Armbian_笔记
    Debian10_Centos8_fail2ban
  • 原文地址:https://www.cnblogs.com/debmzhang/p/5002641.html
Copyright © 2020-2023  润新知