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,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
前端开发 应用服务中间件 nginx
Next.js 创建项目到服务器部署(目录结构介绍、项目结构Demo、开发细节注意)
Next.js 创建项目到服务器部署(目录结构介绍、项目结构Demo、开发细节注意)
347 0
|
设计模式 前端开发
Yii2.0的主要目录结构是什么?底层原理是什么?
Yii2.0的主要目录结构是什么?底层原理是什么?
Yii2.0的主要目录结构是什么?底层原理是什么?
|
测试技术 PHP
Yii2的目录结构是怎样的?
Yii2的目录结构是怎样的?
160 0
|
存储 缓存 前端开发
Laravel 目录结构介绍
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
142 0
|
设计模式 运维 安全
ThinkPHP你必须要掌握的配置加载(6)
ThinkPHP你必须要掌握的配置加载
179 0
ThinkPHP你必须要掌握的配置加载(6)
|
PHP
ThinkPHP你必须要掌握的配置加载(5)
ThinkPHP你必须要掌握的配置加载
136 0
ThinkPHP你必须要掌握的配置加载(5)
|
XML JSON 数据处理
ThinkPHP你必须要掌握的配置加载(4)
ThinkPHP你必须要掌握的配置加载
111 0
ThinkPHP你必须要掌握的配置加载(4)
|
运维 关系型数据库 MySQL
ThinkPHP你必须要掌握的配置加载(2)
ThinkPHP你必须要掌握的配置加载
162 0
ThinkPHP你必须要掌握的配置加载(2)
|
PHP
ThinkPHP你必须要掌握的配置加载(1)
ThinkPHP你必须要掌握的配置加载
116 0
ThinkPHP你必须要掌握的配置加载(1)
|
PHP 容器
ThinkPHP你必须要掌握的配置加载(3)
ThinkPHP你必须要掌握的配置加载
116 0
ThinkPHP你必须要掌握的配置加载(3)