zoukankan      html  css  js  c++  java
  • 第 39 章 ThinkPHP--模块化和 URL 模式

    一.模块化设计 在上一节,我们直接复制 index.php 创建了 admin.php 文件。这样会自动生成两个目录, 分别为 Weibo 和 Admin,前者代表前台,后者代表后台。那么现在采用 ThinkPHP 模块化架 构思想,可以把 Weibo 内的 Home 目录当作前台、Weibo/Admin 目录当作后台。

    操作方法:把 Home 目录复制一份到同级目录,改名为 Admin。把 Admin 中的 Controller 内的 IndexController.class.php 的命名空间改为如下:

    //修改Admin模块的命名空间 namespace AdminController; 最终访问的地址就是: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 访问的时候,应该有一个首选访问。

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

    默认是 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.'
    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 这个字 符串。

    Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] //去除了index.php http://localhost/demo39/Home/User/test/user/Lee/pass/123

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

    我的个人博客,欢迎来访问!网址:http://www.miuu.club
  • 相关阅读:
    tensorboard页面显示No dashboards are active for current data set 问题win10系统
    tensorboard在cmd运行成功但在浏览器中不能正常显示的问题解决
    使用tensorflow设计的网络模型看不到数据流向怎么办
    pycharm中某些方法被标黄的原因及解决办法
    np.newaxis()用法
    决策树模型、本质、连续值完整篇
    决策树模型、本质、连续值
    vsftp 用无法登陆的用户名登陆(也叫虚拟用户)并进入到自己的文件夹test
    vsftp 使用匿名帐号登陆
    CentOS 5/6.X 使用 EPEL YUM源
  • 原文地址:https://www.cnblogs.com/yu520zhong/p/4852201.html
Copyright © 2011-2022 走看看