工学1号馆

home

« | 返回首页 | »

ThinkPHP模块化和URL模式

By Wu Yudong on September 26, 2017

一.模块化设计

在上一节,我们直接复制 index.php 创建了 admin.php 文件。这样会自动生成两个目录,分别为 Weibo Admin,前者代表前台,后者代表后台。那么现在采用 ThinkPHP 模块化架构思想,可以把 Weibo 内的 Home 目录当作前台、Weibo/Admin 目录当作后台。
操作方法: 把
Home 目录复制一份到同级目录, 改名为 Admin。 把 Admin 中的 Controller
内的 IndexController.class.php 的命名空间改为如下:

// Admin模块的命名空间
namespace Admin\Controller;

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

有时,你会觉得 index.php/Admin 这样很麻烦。你可能想直接 admin.php 就代表后台就方便很多,那么可以使用多入口设置。
通过
admin.php 访问 Weibo 目录下的Admin 模块。将 index.php 复制出来改成 admin.php,然后添加如下代码:

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

二.URL 模式

ThinkPHPURL模式有四种,默认是PATHINFO模式,其他三种分别为:普通模式、REWRITE和兼容模式。
http://localhost/demo1/index.php/模块/控制器/操作

在Home/Controller/UserController中添加操作:

//用户密码传参
public function test($user, $pass) {
	echo 'user:' . $user . '<br/>pass:' . $pass;
}

//PATHINFO模式
http://localhost/demo1/index.php/Home/User/test/user/wuyudong/pass/123
在这条 URL 上,Home 表示模块,User 表示控制器,test 表示方法,user/wuyudong 表示第一个键值对,pass/123 表示第二个键值对。

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

//设置键值对分隔符
'URL_PATHINFO_DEPR'=>'_',
设置了分隔符的 URL
http://localhost/demo1/index.php/Home_User_test_user_wuyudong_pass_123

//普通模式
http://localhost/demo1/index.php?m=Home&c=User&a=test&user=wuyudong&pass123
在这条 URL 上,我们发现采用的就是传统的 GET 模式,m 表示模块,c 表示控制器,a
表示方法,后面的表示键值对。
普通模式的
mca 可以自行设置为你习惯的键名称:

//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/demo1/Home/User/test/user/wuyudong/pass/123
PS:兼容模式一般用于不支持 PATHINFO 的特殊环境,基本上用不到

如果文章对您有帮助,欢迎点击下方按钮打赏作者

Comments

No comments yet.
To verify that you are human, please fill in "七"(required)