学习要点:

1.模块化设计

2.URL 模式

本节课,我们主要探讨两个问题。一个是 ThinkPHP3.2.1

本节课,我们主要探讨两个问题。一个是 ThinkPHP3.2.1 的模块化设计,可以支持多

模块的应用创建;第二个就是 URL 模式,提供了多种 URL 显示方式。

一.模块化设计

在上一节,我们直接复制 index.php 创建了 admin.php 文件。这样会自动生成两个目录,

分别为 Weibo 和 Admin,前者代表前台,后者代表后台。那么现在采用 ThinkPHP 模块化架

构思想,可以把 Weibo 内的 Home 目录当作前台、Weibo/Admin 目录当作后台。

操作方法:把 Home 目录复制一份到同级目录,改名为 Admin。把 Admin 中的 Controller

内的 IndexController.class.php 的命名空间改为如下:

//修改Admin模块的命名空间

namespace Admin\Controller;

最终访问的地址就是:http://localhost/demo39/index.php/Admin

有一些模块我们希望是被用户禁止访问的,比如Common和Runtime模块。当然,框

架已经在默认就禁止访问了。

当强行访问Common模块的时候,会提示:“无法加载模块:Common”的错误信息。


//禁止访问模块

   



'MODULE_DENY_LIST'

   

=> array('Common','Runtime'),

   


PS:当你去掉数组里的'Common',那么会提示:“无法加载控制器:Index”的错误信

息。说明这个模块已经可以访问了。

//禁止访问模块,添加一个Admin模块

        'MODULE_DENY_LIST'     => array('Common','Runtime','Admin'),

有禁止访问模块的设置,就有允许访问模块的设置。当设置了此选项,就务必把所有允

许访问的模块都添加上,否则会变成拒绝访问。

//允许访问的模块,设置了,就必须写全,漏写的将无法访问

        'MODULE_ALLOW_LIST'   =>   array('Home','Admin'),

如果有多个访问模块,那么在默认URL访问的时候,应该有一个首选访问。默认是Home,

想设置Admin为默认,可以这么设置:

//设置默认起始模块

'DEFAULT_MODULE'  =>  'Admin', 应用项目如果只允许单个模块的话,可以设置拒绝多个模块,这样创建更多的模块将失

效。

//单模块设置

'MULTI_MODULE' => false, 有时,你会觉得index.php/Admin这样很麻烦。你可能想直接admin.php就代表后

台就方便很多,那么可以使用多入口设置。

这里的多入口和上一节多个应用项目不同,而是通过admin.php访问Weibo目录下的

Admin模块。将index.php复制出来改成admin.php,然后添加如下代码:

//默认指向Admin模块

$_GET['m'] = 'Admin';

//默认指向Index控制器 $_GET['c'] = 'Index';

二.URL模式

ThinkPHP的URL模式有四种,默认是PATHINFO模式,其他三种分别为:普通模式、 REWRITE和兼容模式。

http://localhost/demo39/index.php/模块/控制器/操作

//用户密码传参

class UserController extends Controller { public function test($user, $pass) { echo 'user:'.$user.'<br />pass:'.$pass; }

}

//PATHINFO模式 http://localhost/demo39/index.php/Home/User/test/user/Lee/pass/123

在这条URL上,Home表示模块,User表示控制器,test表示方法,user/Lee表示

第一个键值对,pass/123表示第二个键值对。

PATHINFO模式下默认的分隔符是/,我们可以设置为你想要的,比如:_

//设置键值对分隔符

'URL_PATHINFO_DEPR'=>'_',

设置了分隔符的URL:

http://localhost/demo39/index.php/Home_User_test_user_Lee_pass_123

//普通模式

http://localhost/demo39/index.php?m=Home&c=User&a=test&user=Lee&pass

=123

在这条URL上,我们发现采用的就是传统的GET模式,m表示模块,c表示控制器,a 表示方法,后面的表示键值对。

普通模式的m、c、a可以自行设置为你习惯的键名称:

//修改键名称


'VAR_MODULE'

   

=> 'mm',

   



'VAR_CONTROLLER'

   

=> 'cc',

   



'VAR_ACTION'

   

=> 'aa',

   


http://localhost/demo39/index.php?mm=Home&cc=User&aa=test&user=Lee&p

ass=123

//REWRITE模式(重写模式) httpd.conf配置文件中加载了mod_rewrite.so模块 AllowOverride None 将None改为 All

把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下

这样,ThinkPHP自带的.htaccess文件就起作用了,可以过滤掉index.php这个字

符串。

<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

</IfModule>

//去除了index.php http://localhost/demo39/Home/User/test/user/Lee/pass/123

PS:兼容模式一般用于不支持 PATHINFO 的特殊环境,基本上用不到。


关注极客云图了解更多内容