thinkphp url中action 没定义 也能访问到模板
程序员文章站
2022-06-10 12:14:28
...
thinkphp url中action 没有定义 也能访问到模板?
thinkphp url中action 没有定义 也能访问到模板?
最近刚刚开始接触thinkphp 的框架,但是在看公司源码的时候,发现url中的action在类中没有对应的实现方法。
thinkphp 中有空操作和空模块之说, 我本来以为是通过空操作来实现的。
最终确认的结果:根本没有经过模块,直接把action对应的模板给display了。
本人刚刚接触thinkphp 不知道为什么 求大神帮忙
------解决思路----------------------
你看下配置里面是不是开启了路由功能,路由功能可以伪造地址;不知道这个是不是你现在遇到的问题。
------解决思路----------------------
------解决思路----------------------
在进入用户自定义的action之前,会自动检测是否存在该方法
如果没有就直接读模板,连模板都没有就报一个该方法不存在之类的错误
------解决思路----------------------
这个...没仔细看过官方的,根据它的表现完全可以逆推出原理
如果你感兴趣,可以完整阅读tp的源码
------解决思路----------------------
见 ThinkPHP/Library/Think/Controller.class.php __call 方法
thinkphp url中action 没有定义 也能访问到模板?
最近刚刚开始接触thinkphp 的框架,但是在看公司源码的时候,发现url中的action在类中没有对应的实现方法。
thinkphp 中有空操作和空模块之说, 我本来以为是通过空操作来实现的。
最终确认的结果:根本没有经过模块,直接把action对应的模板给display了。
本人刚刚接触thinkphp 不知道为什么 求大神帮忙
------解决思路----------------------
你看下配置里面是不是开启了路由功能,路由功能可以伪造地址;不知道这个是不是你现在遇到的问题。
------解决思路----------------------
------解决思路----------------------
在进入用户自定义的action之前,会自动检测是否存在该方法
如果没有就直接读模板,连模板都没有就报一个该方法不存在之类的错误
------解决思路----------------------
这个...没仔细看过官方的,根据它的表现完全可以逆推出原理
如果你感兴趣,可以完整阅读tp的源码
------解决思路----------------------
见 ThinkPHP/Library/Think/Controller.class.php __call 方法
/**这是一种容错技术,并不需要在使用手册中说明
* 魔术方法 有不存在的操作的时候执行
* @access public
* @param string $method 方法名
* @param array $args 参数
* @return mixed
*/
public function __call($method,$args) {
if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX'))) {
if(method_exists($this,'_empty')) {
// 如果定义了_empty操作 则调用
$this->_empty($method,$args);
}elseif(file_exists_case($this->view->parseTemplate())){
// 检查是否存在默认模版 如果有直接输出模版
$this->display();
}else{
E(L('_ERROR_ACTION_').':'.ACTION_NAME);
}
}else{
E(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));
return;
}
}
相关文章
相关视频
上一篇: Hibernate Criteria查询
下一篇: CGI如何用C控制SQLite3?