首页 >后端开发 >php教程 >thinkphp url中action 没定义 也能访问到模板

thinkphp url中action 没定义 也能访问到模板

WBOY
WBOY原创
2016-06-13 12:16:421025浏览

thinkphp url中action 没有定义 也能访问到模板?
thinkphp   url中action 没有定义  也能访问到模板?

最近刚刚开始接触thinkphp   的框架,但是在看公司源码的时候,发现url中的action在类中没有对应的实现方法。

thinkphp   中有空操作和空模块之说, 我本来以为是通过空操作来实现的。

最终确认的结果:根本没有经过模块,直接把action对应的模板给display了。

本人刚刚接触thinkphp 不知道为什么  求大神帮忙
------解决思路----------------------
你看下配置里面是不是开启了路由功能,路由功能可以伪造地址;不知道这个是不是你现在遇到的问题。
------解决思路----------------------

引用:
你看下配置里面是不是开启了路由功能,路由功能可以伪造地址;不知道这个是不是你现在遇到的问题。

------解决思路----------------------
在进入用户自定义的action之前,会自动检测是否存在该方法
如果没有就直接读模板,连模板都没有就报一个该方法不存在之类的错误
------解决思路----------------------
引用:
Quote: 引用:

在进入用户自定义的action之前,会自动检测是否存在该方法
如果没有就直接读模板,连模板都没有就报一个该方法不存在之类的错误


谢谢你的解释,你能提供thinkphp官网对此说明的链接给我吗?


这个...没仔细看过官方的,根据它的表现完全可以逆推出原理
如果你感兴趣,可以完整阅读tp的源码
------解决思路----------------------
见 ThinkPHP/Library/Think/Controller.class.php  __call 方法
    /**<br />     * 魔术方法 有不存在的操作的时候执行<br />     * @access public<br />     * @param string $method 方法名<br />     * @param array $args 参数<br />     * @return mixed<br />     */<br />    public function __call($method,$args) {<br />        if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX'))) {<br />            if(method_exists($this,'_empty')) {<br />                // 如果定义了_empty操作 则调用<br />                $this->_empty($method,$args);<br />            }elseif(file_exists_case($this->view->parseTemplate())){<br />                // 检查是否存在默认模版 如果有直接输出模版<br />                $this->display();<br />            }else{<br />                E(L('_ERROR_ACTION_').':'.ACTION_NAME);<br />            }<br />        }else{<br />            E(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));<br />            return;<br />        }<br />    }<br />
这是一种容错技术,并不需要在使用手册中说明
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn