ThinkPHP学习笔记(5) 应用分组

      在一个网站应用中,我们有时候可能会涉及到多个项目。比如,一个新闻发布网站,他会包括前端展示和后台管理这两个项目。要实现两个项目在同一个应用中的管理,我们有一种方法是,为每一个项目建立一个单入口文件,然后用TP框架访问每个单入口地址,TP会自动为我们生成各个项目的目录。

      单入口文件的形式如下:

前端入口文件index.php

<?php
	define('APP_NAME', 'Index');
	define('APP_PATH', './Index/');
	define('APP_DEBUG', TRUE);
	include "./ThinkPHP/ThinkPHP.php";
?>

后端入口文件admin.php
<?php
      define('APP_NAME', 'Admin');
      define('APP_PATH', './Admin/');
      define('APP_DEBUG', TRUE);
      include "./ThinkPHP/ThinkPHP.php";
?>

上面这种方法实现两个项目存在于同一个应用中,其实是有弊端的。这两个项目其实是较为独立的,为了实现功能,我们有时候可能要写许多重复代码及重复文件(如common与tlp模板文件),做到代码公用比较麻烦。

TP应用分组

       TP为我们实现了更好的项目组织方式即——应用分组。

要使用应用分组,可以分如下几个步骤:

1.仍然保持一个单入口文件,如我们可以叫做index.php。其内容如下

<?php
	define('APP_NAME', 'APP');
	define('APP_PATH', './App/');
	define('APP_DEBUG', TRUE);
	include "./ThinkPHP/ThinkPHP.php";
?>
这其实和上面是一样的,但我们并没有将项目分别叫做Index与Admin,而是用统一的名字APP

2.访问入口文件,TP生成应用目录。在Conf目录下的配置文件中,我们配置开启项目分组功能,如下

<?php
return array(
    //开启项目分组
    //开启分组
    'APP_GROUP_LIST' => 'Index,Admin',
    // 默认分组
    'DEFAULT_GROUP' => 'Index',
    //分组模式开启
    'APP_GROUP_MODE' => 1,
    //分组文件夹(即在项目目录的Modules文件夹下分别建立Index,Admin子文件夹做分组)
    'APP_GROUP_PATH' => 'Modules'
);
?>

在上面的分组配置文件中,我们设定了两个项目分组,即Index,Admin。同时我们指定默认分组为Index。


3.在Modules目录下面分别建立Index和Admin文件夹,分别代表前台与后台程序。

Index和Admin文件夹下的子文件夹结构可以是和主项目目录结构一样的(但并非都是必须的,仅有Action文件夹是必须的)。此时,目录结构如下:


可以看出,其实这个目录结构和我们只有一个项目时是完全一样的。那么,我们该如何将Index与Admin两个项目分离呢?

很简单,只需要在配置的分组文件夹(此处名为Modules)下,分别建立名称为Index和Admin的子目录,TP框架会自动为我们寻找相应分组内容。



分组程序目录下的文件夹和主程序目录下的同名文件夹的关系是:

分组程序的目录设置会覆盖主程序目录设置,会共享主程序目录设置。

举个例子,比如在配置文件夹Conf下,我们有一些公共配置,需要两个项目共享。则在Conf目录下建立Config.php文件并写入内容。若针对不同项目的配置,则需要在Conf目录下再分别建立Index与Admin子文件夹,再在子文件夹下分别建立Config.php文件。


这样比如在Admin下我们配置了一个‘USER_NAME’=>'Admin',那么在Admin项目的控制器是可以通过C('USER_NAME')访问到其内容的,而在Index项目下则访问不到。但是若将‘USER_NAME’=>'Admin'写到Conf根目录下,则Admin,Index项目均可以访问USER_NAME。

关于应用分组所对应的文件夹规则,我们有两点需要注意:

1)应用分组后,对控制器文件夹的分组,是必须的。因此在分组目录下,必须为Admin和Index分别建立Action文件夹来存放不同分组的控制器。

2)对用Common文件夹下的函数文件,其功用函数文件名称为common.php,而分属于不同项目的函数文件名称则必须以function.php命名。

如下图所示


4.删除多余的文件夹

(1)删除主程序下Tpl文件夹(分组后,$this->display()函数会访问分组下的Tpl文件夹,因此公共Tpl文件没有意义)

(2)在主目录下的Lib/Action文件删除

5.在分组目录下建立Tpl文件夹,并为每个控制器分别建立子文件夹。如图,这是Admin分组的Tpl文件夹目录。


6.修改__PUBLIC__执行路径。因为在上面,我们在分组的Tpl文件夹下建立了Public文件夹来储存js,css,img等文件(TP默认是主程序根目录下的Public文件夹),因此我们要在配置文件里面修改。

这里要注意的是,分组后配置文件有两种,一个是主文件的配置文件,一个是分组的配置文件。因为我们现在是设置后台Admin分组的public目录(若设置为公共配置,则会影响前台Index的public目录),因此我们在Modules/Admin/Conf/Config.php文件中设置__PUBLIC__目录。

<?php
return array(
	'TMPL_PARSE_STRING' => array(
	'__PUBLIC__' => __ROOT__.'/'.APP_NAME.'/Modules/'.GROUP_NAME.'/Tpl/Public'),
 );
?>

// 注意GROUP_NAME的使用,它会自动替换为当前分组的名称,此次为Admin


7.应用分组url访问规则

在创建应用分组后,除了遵循单项目的url访问规则,我们还必须在url中加上分组名称来区分要访问那个分组的内容。若不指定,则默认访问配置文件中默认分组的文件。

其url格式如下

http://127.0.0.1/wish/index.php/Admin/Index/handle

上面index.php是单一入口文件名称,Admin是Admin分组名称,Index为Admin项目分组Index控制器名称,handle为Index控制器handle函数。

若将Admin改为Index,即

http://127.0.0.1/wish/index.php/Index/Index/handle,则会访问Index项目的Index控制器的handle方法。

注意,这里同样符合TP默认url规则。如果我输入

http://127.0.0.1/wish/index.php/Admin,

则TP默认会寻找Admin项目的Index控制器的index方法。


GROUP_NAME关键字的使用

在TP中,我们免不了要提供文件的路径来供程序访问。而对于分组路径来说,我们可以通过GROUP_NAME关键字来表明当前分组的路径。即无论是同一个项目下的分组A还是分组B,我们都可以通过GROUP_NAME关键字来统一的提供分组的目录路径。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值