php结构的项目,ThinkPHP修改项目结构
纯属闲着无聊的- -!,前两天一直研究dede,放弃了。无聊最近准备研究ThinkPHP,但是ThinkPHP生成的目录的结构让我很郁闷,个人还是比较喜欢dede之类的那种比较简单的结构,所以今天就下手改了一下。现在分享出来给大家。
1.先修改生成项目目录的主体结构,这个不需要修改ThinkPHP的源码(也可以修改,如果是初学者,最好还是先别修改了)
新建index.php入口文件,然后不按照手册新建项目。输入以下代码;
$root=dirname(__FILE__);
$root=str_replace('\\', '/', $root);
define('__ROOT__',$root); //网站根目录
define('LIB_PATH', __ROOT__.'/libs/');
define('CONF_PATH', __ROOT__.'/config/'); //配置文件目录
define('LANG_PATH', __ROOT__.'/lang/'); //语言目录
define('TMPL_PATH', __ROOT__.'/templates/'); //目录文件
define('HTML_PATH', __ROOT__.'/a/'); //生成静态页面目录
define('RUNTIME_PATH',__ROOT__.'/cache/'); //缓存目录
define('LOG_PATH', RUNTIME_PATH.'/log/');
define('TEMP_PATH', RUNTIME_PATH.'/temp/');
define('DATA_PATH',RUNTIME_PATH.'/data/');
define('CACHE_PATH', RUNTIME_PATH.'/cache/');
define('APP_DEBUG', true); //开启调试
require_once 'core/ThinkPHP.php';
这样就可以生成目录了.基本结构就是
我把ThinkPHP文件夹重命名成core了.
2.如果想把Action和Model文件夹也直接放在网站根目录的话,可以直接修改ThinkPHP/Common/runtime.php中第177行左右function build_app_dir() {
// 没有创建项目目录的话自动创建
if(!is_dir(APP_PATH)) mkdir(APP_PATH,0755,true);
if(is_writeable(APP_PATH)) {
$dirs = array(
LIB_PATH,
RUNTIME_PATH,
CONF_PATH,
COMMON_PATH,
LANG_PATH,
CACHE_PATH,
TMPL_PATH,
TMPL_PATH.C('DEFAULT_THEME').'/',
LOG_PATH,
TEMP_PATH,
DATA_PATH,
LIB_PATH.'Model/',
LIB_PATH.'Action/',
LIB_PATH.'Behavior/',
LIB_PATH.'Widget/',
);
foreach ($dirs as $dir){
if(!is_dir($dir)) mkdir($dir,0755,true);
}
// 写入目录安全文件
build_dir_secure($dirs);
// 写入初始配置文件
if(!is_file(CONF_PATH.'config.php'))
file_put_contents(CONF_PATH.'config.php',"<?php \nreturn array(\n\t//'配置项'=>'配置值'\n);\n?>");
// 写入测试Action
if(!is_file(LIB_PATH.'Action/IndexAction.class.php'))
build_first_action();
}else{
header('Content-Type:text/html; charset=utf-8');
exit('项目目录不可写,目录无法自动生成!
请使用项目生成器或者手动生成项目目录~');
}
}
改成function build_app_dir() {
// 没有创建项目目录的话自动创建
if(!is_dir(APP_PATH)) mkdir(APP_PATH,0755,true);
if(is_writeable(APP_PATH)) {
$dirs = array(
LIB_PATH,
RUNTIME_PATH,
CONF_PATH,
COMMON_PATH,
LANG_PATH,
CACHE_PATH,
TMPL_PATH,
TMPL_PATH.C('DEFAULT_THEME').'/',
LOG_PATH,
TEMP_PATH,
DATA_PATH,
__ROOT__.'Model/',
__ROOT__.'Action/',
__ROOT__.'Behavior/',
__ROOT__.'Widget/',
);
foreach ($dirs as $dir){
if(!is_dir($dir)) mkdir($dir,0755,true);
}
// 写入目录安全文件
build_dir_secure($dirs);
// 写入初始配置文件
if(!is_file(CONF_PATH.'config.php'))
file_put_contents(CONF_PATH.'config.php',"<?php \nreturn array(\n\t//'配置项'=>'配置值'\n);\n?>");
// 写入测试Action
if(!is_file(LIB_PATH.'Action/IndexAction.class.php'))
build_first_action();
}else{
header('Content-Type:text/html; charset=utf-8');
exit('项目目录不可写,目录无法自动生成!
请使用项目生成器或者手动生成项目目录~');
}
}
3.模板目录,直接仿造dede的那种
修改ThinkPHP/Lib/Core/View.class.php 第144行 parseTemplate这个方法,具体是在第183行。修改完的代码public function parseTemplate($template='') {
if(is_file($template)) {
$group = defined('GROUP_NAME')?GROUP_NAME.'/':'';
$theme = C('DEFAULT_THEME');
// 获取当前主题的模版路径
if(1==C('APP_GROUP_MODE')){ // 独立分组模式
define('THEME_PATH', dirname(BASE_LIB_PATH).'/'.$group.basename(TMPL_PATH).'/'.$theme);
define('APP_TMPL_PATH',__ROOT__.'/'.APP_NAME.(APP_NAME?'/':'').C('APP_GROUP_PATH').'/'.$group.basename(TMPL_PATH).'/'.$theme);
}else{
define('THEME_PATH', TMPL_PATH.$group.$theme);
define('APP_TMPL_PATH',__ROOT__.'/'.APP_NAME.(APP_NAME?'/':'').basename(TMPL_PATH).'/'.$group.$theme);
}
return $template;
}
$template = str_replace(':', '/', $template);
// 获取当前主题名称
$theme = $this->getTemplateTheme();
// 获取当前模版分组
$group = defined('GROUP_NAME')?GROUP_NAME.'/':'';
if(defined('GROUP_NAME') && strpos($template,'@')){ // 跨分组调用模版文件
list($group,$template) = explode('@',$template);
$group .= '/';
}
// 获取当前主题的模版路径
if(1==C('APP_GROUP_MODE')){ // 独立分组模式
define('THEME_PATH', dirname(BASE_LIB_PATH).'/'.$group.basename(TMPL_PATH).'/'.$theme);
define('APP_TMPL_PATH',__ROOT__.'/'.APP_NAME.(APP_NAME?'/':'').C('APP_GROUP_PATH').'/'.$group.basename(TMPL_PATH).'/'.$theme);
}else{
define('THEME_PATH', TMPL_PATH.$group.$theme);
define('APP_TMPL_PATH',__ROOT__.'/'.APP_NAME.(APP_NAME?'/':'').basename(TMPL_PATH).'/'.$group.$theme);
}
// 分析模板文件规则
if('' == $template) {
// 如果模板文件名为空 按照默认规则定位
$template = MODULE_NAME . C('TMPL_FILE_DEPR') . ACTION_NAME;
}elseif(false === strpos($template, '/')){
// $template = MODULE_NAME . C('TMPL_FILE_DEPR') . $template;
}
return THEME_PATH.C('default').$template.C('TMPL_TEMPLATE_SUFFIX');
}
现在测试一下,在根目录下Action中新建IndexAction.class.php<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
function index(){
$this->assign('title','测试标题');
$this->display('index');
}
}
QQ2387183033 QQ群:252799167
php结构的项目,ThinkPHP修改项目结构相关推荐
- C# 项目如何修改项目名称
下面将演示如何将项目名称改成Test 1.鼠标左击修改项目的修改项目名称 2.ctrl + f ,然后修改整个项目的名称 3.如果修改文件的名称,记得将sln中加载的Test.csproj路径写对
- mysql 修改表结构方案_MySQL中修改表结构时需要注意的一些地方
MySql 在修改表结构的时候可能会中断产品的正常运行影响用户体验,甚至更坏的结果,丢失数据.不是所有的数据库管理员.程序员.系统管理员都非常了解Mysql能避免这种情况.DBA会经常碰到这种生产中断 ...
- oracle修改表结构精度,常见问题--oracle10g修改表结构
1.修改表结构 语法: alter table table_name modify (列名 数据类型) 示例: 9:54:25 SQL> alter table dbtest_dw_cust_ ...
- vue-cli+webpack项目,修改项目名称
使用vue-cli+webpack创建的项目,修改文件名称或者更改文件的位置,运营时会报错,是因为npm项目,在安装依赖(node_nodules)时,会记录当前的文件路径,当修改之后就无法正常启动. ...
- mysql 如何修改数据库表结构_MySQL数据库如何修改表结构
MySQL数据库修改表结构的方法:1.使用add添加字段,使用drop删除字段:2.使用alter修改字段名:3.修改列类型:4.修改表名:5.修改表选项:6.修改列属性. MySQL数据库修改表结构 ...
- 怎么修改mysql表的结构_MySQL数据库如何修改表结构
MySQL数据库修改表结构的方法:1.使用add添加字段,使用drop删除字段:2.使用alter修改字段名:3.修改列类型:4.修改表名:5.修改表选项:6.修改列属性. [相关图文教程:mysql ...
- Maven项目 (JeecgBoot)修改项目名和模块名方法
JeecgBoot使用版本:2.2.1 只要是Maven项目,修改的方式都和本文大同小异 文章目录 后端 修改文件名 修改模块名 `pom.xml` 重新构建 前端 拓1 去掉请求路径的 `/jeec ...
- oracle 批量修改表结构,关于Oracle批量修改表结构相关内容的整理
从各地搜集而来,以备不时之需,随时增改 1.给表加注释 COMMENT ON TABLE land.landsellmend IS '补办出让'; 2.查看表的COMMENT SELECT * FRO ...
- myeclipse 修改项目名Tomcat启动项目报错java.lang.IllegalArgumentException: Can't convert argument: null...
一.Tomcat启动报错: 有时候我们会避免项目重名,在导入项目时会修改项目名称. 修改项目名称后启动该项目至tomcat,报错:java.lang.IllegalArgumentException: ...
- 解决IDEA修改已有项目为maven项目时目录结构被改变的问题
Idea可以在项目根目录上右键选择"添加框架支持",选择maven,为项目添加Maven支持. 但这样会导致原有项目的目录结构被破坏. 更好的方法是在根目录添加pom.xml文件 ...
最新文章
- linux会话管理,Linux 安装 screen 远程会话管理工具
- 完美解决api-ms-win-crt-runtime-l1-1-0.dll 丢失问题
- Linux学习之遇到的小问题---查看系统版本,虚拟机创建共享文件夹,用到的命令记录。
- JBPM中 使用JobExecutor执行timer定义的job
- OpenSSH 密钥管理:RSA/DSA 认证(转载)
- linux:vi 替换命令
- DeFi 协议 Benchmark Protocol 启动第二阶段流动性挖矿计划 The Press
- centos7 svn自动更新至web目录
- python爬虫的用途_python爬虫用代理ip有什么用途?
- matplotlib-plt.plot用法
- mysql temp table_新特性解读 | MySQL 8.0 Temptable 引擎介绍
- 动态SQL和PL/SQL的EXECUTE IMMEDIATE选项
- 解决办法:Eclipse卡死在“revert resources”,进度一直为0
- 计算机机房安全设计规范,弱电机房建设规范要求
- 基于Python的汉语分词系统
- nginx集群部署,实现高可用
- Keil5下载芯片包并导入教程
- 电信NB-IOT物联网卡与阿里云物联网平台,不得不说的秘密!
- #467 – 使用UniformGrid 均分行和列(Use a UniformGrid for Evenly Spaced Rows and Columns)
- HTML+CSS一篇文章搞定
热门文章
- 学习面向对象的第一天,感觉还好啦
- [翻译]MVP(SC),MVP(PV),PM,MVVM 和 MVC 表现模式架构对比
- Google Maps API 进级:GoogleMaps中显示画中画
- spring循环依赖 第二讲
- idea类文件前面有个小叉号
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。...
- 【路由和交换之H3C自导自演】
- mongodb的用法
- Ubuntu和Windows双系统调整启动顺序软件
- uboot引导内核全过程