TP手册学习第二天
- 默认情况下,
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
目录,然后定义一个\my\Test
类( 类文件位于extend/my/Test.php
)如下:- namespace my;
- class Test
- {
- public function sayHello()
- {
- echo 'hello';
- }
- }
我们就可以在控制器直接实例化和调用
- $Test = new \my\Test();
- $Test->sayHello();
如果我们在应用入口文件中重新定义了
EXTEND_PATH
常量的话,还可以改变\my\Test
类文件的位置,例如:在public下的index.php定义- define('EXTEND_PATH','../vendor/');
然后在vendor目录下面新增一个
my
目录,然后定义一个\my\Test
类( 类文件位于vendor/my/Test.php
) - namespace my;
- 手动注册根命名空间:
在应用入口文件中添加下面的代码:测试时提示错误》》Fatal error: Class 'think\Loader' not found in D:\www\test\my\public\index.php on line 18
- \think\Loader::addNamespace('my','../application/extend/my/');
如果要同时注册多个根命名空间,可以使用:
- \think\Loader::addNamespace([
- 'my' => '../application/extend/my/',
- 'org' => '../application/extend/org/',
- ]);
也可以直接在应用的配置文件中添加配置,系统会在应用执行的时候自动注册。测试未通过》》Class 'org\Test' not found
- 'root_namespace' => [
- 'my' => '../application/extend/my/',
- 'org' => '../application/extend/org/',
common模块是一个特殊的模块,默认是禁止直接访问的,一般用于放置一些公共的类库用于其他模块的继承。
- 应用公共文件:common.php
- 绑定默认访问模块和控制器
- 可以在应用公共文件common.php中绑定模块和控制器,如下:
- // 绑定当前访问到index模块的index控制器
- define('BIND_MODULE','index/index');
- 可以在应用公共文件common.php中绑定模块和控制器,如下:
一般入口文件以定义一些常量为主,支持的常量如下:
路径常量- 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 环境变量配置前缀
- DS 当前系统的目录分隔符
空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(
_empty
)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化- <?php
- namespace app\index\controller;
- class City
- {
- public function _empty($name)
- {
- //把所有城市的操作解析到city方法
- return $this->showCity($name);
- }
- //注意 showCity方法 本身是 protected 方法
- protected function showCity($name)
- {
- //和$name这个城市相关的处理
- return '当前城市' . $name;
- }
- }
- <?php
空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位空控制器(Error),我们可以给项目定义一个Error控制器类
<?php
namespace app\index\controller;
use think\Request;class Error{
function index(Request $request){ //$request是一个Request对象
$conl_name=$request->controller(); ////获取URL中的控制器名称
halt($conl_name.'不存在');
echo "这是个空控制器";
}}
控制器初始化方法
_initialize
,前提是你的控制器要继承 think\Controller如果继承了
think\Controller
类的话,可以直接调用think\View
及think\Request
类的方法- // 获取包含域名的完整URL地址
- $domain=$this->request->url(true);
- halt($domain);
- // 获取包含域名的完整URL地址
设置
beforeActionList
属性可以指定某个方法为其他方法的前置操作- protected $beforeActionList = [
- 'first', //执行所有方法之前都进行first操作
- 'second' => ['except'=>'hello'], //除了hello方法,执行其他方法之前都进行second操作
- 'three' => ['only'=>'hello,data'], ////执行hello,data方法之前都进行three操作
- ];
- protected $beforeActionList = [
重定向:\think\Controller类的
redirect
方法可以实现页面的重定向功能。- //重定向到News模块的Category操作
- $this->redirect('News/category', ['cate_id' => 2]);
- //重定向到外部url
- $this->redirect('http://www.baidu.com');
- //重定向到News模块的Category操作
TP手册学习第二天的更多相关文章
- TP手册学习第四内置天
比较标签: eq:等于 heq:恒等于 gt:大于 lt:小于 (前面加上n则为否,如neq表示不等于)使用方法:{gt name="name" value= ...
- TP手册学习第三天
命令行先在cmd进入项目目录,再执行命令 生成index模块的Blog控制器类库文件:php think make:controller index/Blog 如果仅仅生成空的控制器则可以使用:php ...
- TP手册学习第一天
调试执行的sql语句 User::get(1); echo User::getLastSql(); 方法直接返回当前的查询SQL而不执行fetchSql echo User::fetchSql()-& ...
- Pandas 学习手册中文第二版·翻译完成
原文:Learning pandas 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 72418 ...
- 前端学习 第二弹: JavaScript中的一些函数与对象(1)
前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...
- 二、Android学习第二天——初识Activity(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...
- python学习第二讲,pythonIDE介绍以及配置使用
目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...
- python学习第二次笔记
python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】
[中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...
随机推荐
- 编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)
主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 命令式编程: 命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么. 比如:如果你想在一个数字集合 collec ...
- 咫尺论坛|即速应用-微信小程序社区
咫尺论坛|即速应用-微信小程序社区 是一个集微信和支付宝小程序行业资讯.开发资源.技术交流于一身的大型小程序开发论坛,成立伊始便迅速聚集了一大批小程序开发爱好者,短时间内成为了国内领先的小程序开发者社 ...
- 一次Oracle宕机切换后产生ORA错误的处理过程
问题背景 机房意外断电后Oracle主服务器启动失败,Oracle备机接管 为了安全,管理员对于数据库做expdp的逻辑备份.但备份时发现AttributeInstance表备份失败,提示ORA-01 ...
- 51nod 1231 记分牌
链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1231 一个得分合法等价于前k小的得分之和大于等于$\frac{k* ...
- GDKOI2016 游记
2016.2.19~2.15强行广州koi被虐…… DAY 0 19日下午到达,第六次入住中大西苑宾馆,怂逼抽签抽中外交大使特殊职位,然后就一边看<死神>一边等石门两位室友啦.必须吐槽宾馆 ...
- [51nod1297]管理二叉树
一个初始为空的二叉搜索树T,以及1到N的一个排列P: {a1, a2, ..., aN}.我们向这个二叉搜索树T添加这些数,从a1开始, 接下来是 a2, ..., 以aN结束.在每一个添加操作后,输 ...
- BZOJ 1061: [Noi2008]志愿者招募【单纯形裸题】
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 4813 Solved: 2877[Submit][Stat ...
- HDU 1241 DFS
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- echarts自定义提示框数据
tooltip: { trigger: "axis", axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: "line" // 默认为 ...
- [学习OpenCV攻略][016][RedHat下安装OpenCV]
安装环境 操作系统: Red Hat Enterprise Linux Server 6.3 相关软件: ffmpeg-0.8.15.tar.bz2.cmake-3.5.1.tar.gz.OpenCV ...