目录结构,Common为公用的
Common\Conf\config.php
默认的访问控制器层是Controller,我们可以调整设置如下:
'DEFAULT_C_LAYER' => 'Event', // 默认的控制器层名称改为Event
默认的视图层是View目录,我们可以调整设置如下:
'DEFAULT_V_LAYER' => 'Mobile', // 默认的视图层名称更改为Mobile
增加ACTION_SUFFIX配置参数,用于设置操作方法的后缀。
'ACTION_SUFFIX'=>'Action'
那么访问某个模块的add操作对应读取模块类的操作方法则由原来的add方法变成addAction方法。
/* 默认设定 */
'DEFAULT_CONTROLLER' => 'Index', // 默认控制器名称
'DEFAULT_ACTION' => 'index', // 默认操作名称
'DEFAULT_M_LAYER' => 'Logic', // 默认的模型层名称
/* URL设置 */
'URL_ROUTER_ON' => true, // 开启路由
'URL_MODEL' => 2,
/*系统变量名称设置*/
'URL_HTML_SUFFIX' => '', // URL伪静态后缀设置
'VAR_MODULE' => 'm', // 默认模块获取变量
'VAR_CONTROLLER' => 'c', // 默认控制器获取变量
'VAR_ACTION' => 'a', // 默认操作获取变量
'VAR_AJAX_SUBMIT' => 'ajax', // 默认的AJAX提交变量
'VAR_JSONP_HANDLER' => 'callback',
'VAR_PATHINFO' => 's',
扩展配置可以支持自动加载额外的自定义配置文件
'LOAD_EXT_CONFIG' => ['db','business'], // 加载扩展配置
配置文件根据环境快速切换
'LOAD_EXT_CONFIG' => [
APP_STATUS.'/config', //部署环境入口配置, 目前已定义环境配置[live:线上环境 test:测试环境 dev:开发环境]
APP_STATUS.'/db',
],//加载扩展配置
在Index模块下配置Config/config.php
/* 错误页面模板 */
'TMPL_ACTION_ERROR' => MODULE_PATH.'View/_Public/error.html', // 默认错误跳转对应的模板文件
'TMPL_EXCEPTION_FILE' => MODULE_PATH.'View/_Public/exception.html',// 异常页面的模板文件
'LAYOUT_ON'=> true,
'LAYOUT_NAME'=>'layout',
支持多模块配置
<?php
// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
//定义环境,测试线为test,正式线为live
define('APP_STATUS', 'test');
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',true);
// 定义应用目录
define('APP_PATH','./');
// 引入ThinkPHP入口文件
require '../vendor/autoload.php';
再配置模块白名单
'MODULE_ALLOW_LIST' => array('Home','Api','Admin'),
'DEFAULT_MODULE' => 'Home', //默认模块
设置之后,除了Home、Admin和Api模块之外的模块都不能被直接访问,并且Home模块是默认访问模块,
跨模块调用
D("模块名/model名")->getTableName();
模板替换
__ACTION__ //Home/Index/index
__CONTROLLER__ //Home/Index
{:MODULE_NAME} //Home
{:CONTROLLER_NAME} //Index
{:ACTION_NAME} //index
__PUBLIC__ //会被替换成当前网站的公共目录 通常是 /Public/
realpath(__ROOT__) //网站根目录地址
组合查询
if ($startDate) {
$param['secure_date'] = [['egt', $startDate]];
}
if ($endDate) {
$param['secure_date'] = $param['secure_date'] ? array_merge([['elt', $endDate]], $param['secure_date']) : [['elt', $endDate]];
}
$where['cate_tree'] = [['like', "$id-%"], ['like', "%-$id-%"], 'OR'];
$where['_string'] = "FIND_IN_SET('{$this->session_employee_id}', worker_ids)";
if($keywords){
$where['_string'] .= " AND img.wws_id LIKE '%$keywords%' OR img.car_number LIKE '%$keywords%'";
}
$map['name'] = array('exp','is null');
去重统计查询
$count = $model->where($map)->count('distinct id');
更新时字段加减
M('user')>where(['id' =>1])->data(['real_name' => $data['customer_name'], 'feedback_count' =>['exp', 'feedback_count+1']])->save();
thinkphp显示模板文件,自定义路径
# $this->display('drivinglicense:dialog_edit');
#ThinkPHP\Lib\Behavior\LocationTemplateBehavior.class.php
private function parseTemplateFile($templateFile) {
if(''==$templateFile) {
// 如果模板文件名为空 按照默认规则定位
$templateFile = C('TEMPLATE_NAME');
}elseif(false === strpos($templateFile,C('TMPL_TEMPLATE_SUFFIX'))){
// 解析规则为 模板主题:模块:操作 不支持 跨项目和跨分组调用
$path = explode(':',$templateFile);
$action = array_pop($path);
$module = !empty($path)?array_pop($path):MODULE_NAME;
if(!empty($path)) {// 设置模板主题
$path = dirname(THEME_PATH).'/'.array_pop($path).'/';
}else{
$path = THEME_PATH;
}
$depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';
$templateFile = $path.$module.$depr.$action.C('TMPL_TEMPLATE_SUFFIX');
}
if(!file_exists_case($templateFile))
throw_exception(L('_TEMPLATE_NOT_EXIST_').'['.$templateFile.']');
return $templateFile;
}