ThinkPHP修改项目结构

简介:

   纯属闲着无聊的- -!,前两天一直研究dede,放弃了。无聊最近准备研究ThinkPHP,但是ThinkPHP生成的目录的结构让我很郁闷,个人还是比较喜欢dede之类的那种比较简单的结构,所以今天就下手改了一下。现在分享出来给大家。

   1.先修改生成项目目录的主体结构,这个不需要修改ThinkPHP的源码(也可以修改,如果是初学者,最好还是先别修改了)

   新建index.php入口文件,然后不按照手册新建项目。输入以下代码;

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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' ;


这样就可以生成目录了.基本结构就是

154217691.png

我把ThinkPHP文件夹重命名成core了.


   2.如果想把Action和Model文件夹也直接放在网站根目录的话,可以直接修改ThinkPHP/Common/runtime.php中第177行左右

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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( '项目目录不可写,目录无法自动生成!<BR>请使用项目生成器或者手动生成项目目录~' );
     }
}

改成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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 ( '项目目录不可写,目录无法自动生成!<BR>请使用项目生成器或者手动生成项目目录~' );
     }
}



3.模板目录,直接仿造dede的那种

   修改ThinkPHP/Lib/Core/View.class.php 第144行  parseTemplate这个方法,具体是在第183行。修改完的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    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

1
2
3
4
5
6
7
8
<?php
// 本类由系统自动生成,仅供测试用途
class  IndexAction  extends  Action {
     function  index(){
         $this ->assign( 'title' , '测试标题' );
         $this ->display( 'index' );
     }
}


然后访问http://localhost/Index/index测试。










本文转自 3147972 51CTO博客,原文链接:http://blog.51cto.com/a3147972/1288607,如需转载请自行联系原作者
目录
相关文章
|
PHP 数据库
ThinkPHP多应用/项目配置技巧(使用同一配置文件)--(十六)
原文: ThinkPHP多应用/项目配置技巧(使用同一配置文件)--(十六) ThinkPHP多应用配置技巧(没有使用分组,这是通过入口文件产生的Home、Admin)----很实用! 比如:现在有Home、Admin应用问题:前台后台使用数据库的时候...
1372 0
|
存储 缓存 前端开发
Laravel 目录结构介绍
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
142 0
|
前端开发 PHP 数据库
Laravel的目录结构分析
根目录结构/app/bootstrap/public/vendorartisancomposer.jsonserver.php1./app整个Laravel 目录中最需要我们注意的地方,包含设置(config)、路由(routing)、MVC 模型的三大模块都在这里,项目的主要代码工作都在这个目录下完成。
1281 0
|
Linux PHP 数据库
Yii2框架(一)安装及目录结构
Yii2.0分为两个版本,basic(基础版)和advanced(高级版)。
433 0
Yii2框架(一)安装及目录结构
|
PHP
thinkphp学习笔记9—自动加载
1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载。 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\Util\Auth类: namespace Org\Util; class Auth { } 保存到ThinkPHP/Library/Org/Util/Auth.
955 0
|
PHP
【laravel项目】@1 加载模板
【laravel项目】@1 加载模板
83 0
【laravel项目】@1 加载模板
|
测试技术 PHP
Yii2的目录结构是怎样的?
Yii2的目录结构是怎样的?
160 0
|
PHP
【laravel项目】@9 laravel-admin汉化菜单 新增模块
【laravel项目】@9 laravel-admin汉化菜单 新增模块
116 0
【laravel项目】@9 laravel-admin汉化菜单 新增模块
|
PHP Java .NET
thinkphp学习笔记1—目录结构和命名规则
最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快点,别无他意,所谓活到老,学到老,希望各位不要见笑啊。 我的做法很简单,先从手册开始,手册是开发thinkphp作者辛勤劳动的成果,但是有些地方是在是不懂,如果有幸各位也遇到类似的问题希望能回复。
1153 0