- 默认情况下,
URL
是不区分大小写的,访问规则:……模块/控制器/操作/参数/值,如果要访问驼峰法的控制器类BlogTest,则需要使用:blog_test - MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。
- 我们可以简单的理解一个根命名空间对应了一个类库包。
系统内置的几个根命名空间(类库包)如下: 名称 描述 think 系统核心类库 thinkphp/library/think traits 系统Trait类库 thinkphp/library/traits app 应用类库 application - 自动注册根命名空间:我们只需要把自己的类库包目录放入
EXTEND_PATH
目录(默认为extend
,可配置),就可以自动注册对应的命名空间,例如:我们在
extend
目录下面新增一个my
目录,然后定义一个myTest
类( 类文件位于extend/my/Test.php
)如下:namespace my; class Test { public function sayHello() { echo 'hello'; } }
我们就可以在控制器直接实例化和调用
$Test = new myTest(); $Test->sayHello();
如果我们在应用入口文件中重新定义了
EXTEND_PATH
常量的话,还可以改变myTest
类文件的位置,例如:在public下的index.php定义define('EXTEND_PATH','../vendor/');
然后在vendor目录下面新增一个
my
目录,然后定义一个myTest
类( 类文件位于vendor/my/Test.php
) - 手动注册根命名空间:
在应用入口文件中添加下面的代码:测试时提示错误》》Fatal error: Class 'thinkLoader' not found in D:www estmypublicindex.php on line 18
hinkLoader::addNamespace('my','../application/extend/my/');
如果要同时注册多个根命名空间,可以使用:
hinkLoader::addNamespace([ 'my' => '../application/extend/my/', 'org' => '../application/extend/org/', ]);
也可以直接在应用的配置文件中添加配置,系统会在应用执行的时候自动注册。测试未通过》》Class 'orgTest' not found
'root_namespace' => [ 'my' => '../application/extend/my/', 'org' => '../application/extend/org/',
-
common模块是一个特殊的模块,默认是禁止直接访问的,一般用于放置一些公共的类库用于其他模块的继承。
- 应用公共文件:common.php
- 绑定默认访问模块和控制器
可以在应用公共文件common.php中绑定模块和控制器,如下: // 绑定当前访问到index模块的index控制器 define('BIND_MODULE','index/index');
-
一般入口文件以定义一些常量为主,支持的常量如下:
路径常量DS 当前系统的目录分隔符 THINK_PATH 框架系统目录 ROOT_PATH 框架应用根目录 APP_PATH 应用目录(默认为application) CONF_PATH 配置目录(默认为APP_PATH) LIB_PATH 系统类库目录(默认为 THINK_PATH.'library/') CORE_PATH 系统核心类库目录 (默认为 LIB_PATH.'think/') TRAIT_PATH 系统trait目录(默认为 LIB_PATH.'traits/') EXTEND_PATH 扩展类库目录(默认为 ROOT_PATH . 'extend/') VENDOR_PATH 第三方类库目录(默认为 ROOT_PATH . 'vendor/') RUNTIME_PATH 应用运行时目录(默认为 ROOT_PATH.'runtime/') LOG_PATH 应用日志目录 (默认为 RUNTIME_PATH.'log/') CACHE_PATH 项目模板缓存目录(默认为 RUNTIME_PATH.'cache/') TEMP_PATH 应用缓存目录(默认为 RUNTIME_PATH.'temp/')
系统常量
IS_WIN 是否属于Windows 环境 IS_CLI 是否属于命令行模式 THINK_START_TIME 开始运行时间(时间戳) THINK_START_MEM 开始运行时候的内存占用 ENV_PREFIX 环境变量配置前缀
-
空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(
_empty
)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化<?php namespace appindexcontroller; class City { public function _empty($name) { //把所有城市的操作解析到city方法 return $this->showCity($name); } //注意 showCity方法 本身是 protected 方法 protected function showCity($name) { //和$name这个城市相关的处理 return '当前城市' . $name; } }
-
空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位空控制器(Error),我们可以给项目定义一个Error控制器类
<?php
namespace appindexcontroller;
use thinkRequest;class Error{
function index(Request $request){ //$request是一个Request对象
$conl_name=$request->controller(); ////获取URL中的控制器名称
halt($conl_name.'不存在');
echo "这是个空控制器";
}}
-
控制器初始化方法
_initialize
,前提是你的控制器要继承 thinkController -
如果继承了
thinkController
类的话,可以直接调用thinkView
及thinkRequest
类的方法// 获取包含域名的完整URL地址 $domain=$this->request->url(true); halt($domain);
-
设置
beforeActionList
属性可以指定某个方法为其他方法的前置操作protected $beforeActionList = [ 'first', //执行所有方法之前都进行first操作 'second' => ['except'=>'hello'], //除了hello方法,执行其他方法之前都进行second操作 'three' => ['only'=>'hello,data'], ////执行hello,data方法之前都进行three操作 ];
-
重定向: hinkController类的
redirect
方法可以实现页面的重定向功能。//重定向到News模块的Category操作 $this->redirect('News/category', ['cate_id' => 2]); //重定向到外部url $this->redirect('http://www.baidu.com');