目录结构,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%'"; }
去重统计查询
$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; }