thinkphp3的访问模式是
http://域名/项目名/分组名/模块名/操作名/其他参数
1我们的模块位于home 我们的action是专题页面
根据thinkphp3.0 5.3定义action的文档
所以第一步我在 App/Lib/Action/Home/目录下增加ZhuantipageAction.class.php
继承自 HomeBaseAction 然后有一个public的方法 demo 访问的时候有
http://localhost/index.php/home/Zhuantipage/demo 就可以了
但是由于我们专题可能就是上html页面,所以不可能每个专题写一个方法。
所以我们新建一个zhuanti方法。在前面 http://域名/项目名/分组名/模块名/操作名/其他参数 的基础上。让专题名成为其他参数
我们在zhuanti方法中通过_GET获取这个参数,然后根据专题名字zhuantiname 调用display显示模板以及内容
如上就调用了display(jiaozheng.html) 显示这个页面。那jiaozheng.html这个页面放在哪里呢?
根据7.1的视图模板定义来说
所以我们的jiaozheng.html应该放在
App/Tpl/Home/Default/Zhuantipage/jiaozheng.html
这样的话。我们就可以通过访问
http://localhost/index.php/home/zhuantiPage/zhuanti/jiaozheng.html
来访问矫正的页面了.注意了这里的html是模板,可以通过内置输出比如{$Title} ----- {$WebName}这样的形式输出php的内容
这些内容是在哪里赋值的呢?( 这里Title和WebName里面的数据实际位于 youdian_config表)
这里还记得我们继承了HomeBaseAction。在HomeBaseAction继承 BaseAction 里面有一个_initialize()函数
$this->_getPublicVar();
$this->_assignPublicVar();
$this->assign('WebName', $GLOBALS['Config']['WEB_NAME']);
$this->assign('Title', $GLOBALS['Config']['TITLE']);
那这个 $GLOBALS['Config']['TITLE']又是哪里来的呢?
这个配置的GLOBALS['Config']['TITLE']应该是来自Config_cn.php里面return的array里面。因为这些arrary都会被放置到GLOBALS变量里面
位于 CheckLangBehavior.class.php run方法里面$this->checkLanguage();
//加载全局用户配置变量
$GLOBALS['Config'] = YdCache::readConfig();
readconfig位于common.php中
static function readConfig($item=false){
$file = 'config_'.get_language_mark();
$data = F($file);
if( empty($data) ){
YdCache::writeConfig();
$data = F($file);
}
if( $item !== false ){
$data = isset($data[$item]) ? $data[$item] : '';
}
return $data;
}
首先是根据语言检查文件。读取文件。如果这个config_cn.php是空的。那么执行writeconfig 这个就是从数据库中读取数据并且保存为config_cn.php文件
static function writeConfig(){
$configFile = 'config_'.get_language_mark();
//存储在数据库中的配置项缓存
$m = D('Admin/Config');
$data = $m->getConfig(); //读取所有配置项数据
//Tag标签数据缓存
$m = D('Admin/Tag');
$data['TAG_LIST'] = $m->getTagField();
//频道缓存
$m = D('Admin/Channel');
$data['CHANNEL_DATA'] = $m->writeCache();
//保存为缓存文件
F($configFile, $data);
return $data;
}
最后一个问题就是 CheckLangBehavior.class.php 这个run方法是什么时候被运行的呢?
这个可以参考thinkphp实战记录3里面的内容 其实实在执行tag标签的时候运行的。
我们看到在Core/conf/tags.php里面有个app_begin=>arrary() 里面有"checkLang"
'app_begin'=>array( //因为项目中也可能用到语言行为,最好放在项目开始的地方
'CheckLang', //检测语言, 一定放在ReadHtmlCache前,否则会导致静态缓存有问题
//'BadIP', //ip过滤
'StartWeb', //启动Web
'ReadHtmlCache', // 读取静态缓存
)
根据描述。就是在调用tag('app_begin')的位置就会按顺序调用CheckLangBehavior.class.php
StartWebBehavior.class.php ReadHtmlCacheBehavior.class.php里面的run方法。
这个是在app.class.php的run方法里调用了 tag('app_begin');