Think PHP 5.0笔记手册
目录结构
application 应用目录(可设置)
index 模块目录 可以建立多个模块 例如 前台 后台
controller 控制器目录
model 模型目录
view 视图目录
config.php 模块配置文件
common.php 模块函数文件
command.php 命令行工具配置文件 当执行命令行的时候会读取此文件的配置
common.php 应用公共(函数)文件 此文件用于书写公共的函数(方法)可以在全局使用
config.php 应用(公共)配置文件 配置之后建立的模块会共用此配置文件
database.php 数据库配置文件 链接收据库
tags.php 应用行为扩展定义文件 对url进行美化修改此文件的路由配置
route.php 路由配置文件 应用行为扩展 可以对框架进行扩展并不需要修改框架的源码我们可以通过向钩子 注册某些函数或者行为 来改变框架执行流程 从而引用其他扩展
extend 扩展类库目录(可定义) 下载第三方库 之后适当的修改命名空间之后就可以使用了第三方类文件了
public WEB 部署目录(对外访问目录)
favicon.ico 访问网页的时候标签页面会显示图标
static 静态资源存放目录(css,js,image)
index.php 应用入口文件 所有请求都必须进过此入口文件之后再进行转发
router.php 快速测试文件 检测电脑是否安装Apache 如果没有则通过php来启动此框架
进入到public目录下 输入 php -S localhost 8888(端口号) router.php
在浏览器输入 localhost:8888 进行查看 会看到框架已经启动成功
ctrl+C 进行退出之后 在进行查看 则会无法进行访问
robots.txt 搜索引擎爬虫文件 定义所有引擎的url是否需要爬取 例如 后台所有的url是不需要被爬取到的 而前台是允许 需要对此文件进行配置的
.htaccess 用于 apache 的重写
runtime 应用的运行时目录(可写,可设置) 运行时的缓存文件 日志 缓存 编译文件等
thinkphp 框架系统目录
lang 语言包目录
library 框架核心类库目录
think Think 类库包目录 框架核心文件
traits 系统 Traits 目录 类库的扩展
tpl 系统模板目录 框架模板文件 里面还有框架的默认模拟
default_index.tpl 控制器模板文件
dispatch_jump.tpl 成功失败跳转文件
page_trace.tpl 调试模板文件
think_exception.tpl 异常时的模板文件
base.php 基础定义文件 定义常量
composer.json composer 定义文件 定义 composer 配置文件
console.php 控制台入口文件
convention.php 惯例配置文件 框架配置文件
helper.php 助手函数文件(可选)
LICENSE.txt 授权说明文件
phpunit.xml 单元测试配置文件
README.md README 文件 说明文件
start.php 框架引导文件 框架启动文件
vendor 第三方类库目录(Composer) 通过composer安装的所有类库都会放到此文件
开发规范
目录和文件
目录使用小写+下划线
类库、函数文件统一以.php为后缀
类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致
类文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名
类名和类文件名保持一致,统一采用驼峰法命名(首字母大写)
函数和类、属性命名
类的命名采用驼峰法(首字母大写),例如 User、UserType,默认不需要添加后缀,例如UserController应该直接命名为User;
函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip
方法的命名使用驼峰法(首字母小写),例如 getUserName
属性的命名使用驼峰法(首字母小写),例如 tableName、instance
以双下划线“__”打头的函数或方法作为魔术方法,例如 __call 和 __autoload
常量和配置
常量以大写字母和下划线命名,例如 APP_PATH和 THINK_PATH
配置参数以小写字母和下划线命名,例如 url_route_on 和url_convert
数据表和字段
数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 think_user 表和 user_name字段,不建议使用驼峰和中文作为数据表字段命名
应用类库命名空间规范
应用类库的根命名空间统一为app(不建议更改,可以设置app_namespace配置参数更改,V5.0.8版本开始使用APP_NAMESPACE常量定义);
例如:app\index\controller\Index和app\index\model\User
模块设计 控制器
拥有命名空间
对应的文件夹目录 app\admin\controller 应用主体\模块\文件夹名称(view controller model 等)
创建公共模块 common 不能直接访问
新建立controller和action 新建控制器和方法
想访问公共文件需要 use 将文件命名空间引入 需要用as起别名
use app\common\controller\Index as commonIndex;
调用 方法 use 引入 实例化进行调用 获取数据
重写公共的方法 继承 引入公共方法 use 引入as起别名 类继承(继承as之后的别名) 调用方法可以传递参数 重写父类
重要知识点
继承是PHP5面象对象程序设计的重要特性之一,它是指建立一个新的派生类,从一个或多个先前定义的类中继承数据和函数,而且可以重新定义或加进新数据和 函数,从而建立了类的层次或等级。
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容
重定义配置文件
配置文件运行原理
public function configdemo()
{
//模拟框架配置
$onearr=[‘username’=>‘人生得意须尽欢’];
$twoarr=[‘userpwd’=>‘莫使金撙节空对月’];
// array_merge — 合并一个或多个数组
//数组分别代表两个配置文件 会将数组中相同键的值用第二个数组的值进行替换
//数组分别代表两个配置文件 如果数组中键不同则获奖两个数组中的健及对应的值全部以数组的形式展示出来
var_dump(array_merge($onearr,$twoarr));
}
在入口文件定义配置文件路径 与app文件平级 并建立conf文件夹(固定名称)
惯例配置 convention.php 在此文件对框架进行配置
应用配置 在conf文件夹新建config.php文件 对全局进行配置
可以将配置数据库单独分离新建database.php文件 对数据进行配置 注意此文件需要将一数组的方式将所有的数据库配置放在此目录 数组的方式进行配置 (惯例配置将数据库配置复制到此文件就可以了)
此配置文件可以修改所有的惯例配置
扩展配置 在文件夹新建extra文件夹 可以新建任何的配置扩展文件
(当扩展的配置较多的时候应用以数组的形式进行配置 扩展较少建议在config文件直接进行配置 便于维护配置信息)
扩展的名称会默认新建的文件名称 配置扩展的优先级高于config文件的的配置
模块配置 conf新建与app模块文件夹相同的文件夹 并新建config.php文件对模块进行配置 在模块下也可以采用扩展配置 此配置只对对应的模块有效
动态配置 可以通过config类与config助手类 对某个方法进行配置 详细配置方法参考config类与config助手类
config类与config助手类
config类
config() //第一个参数键值 第二个参数值 第三各参数作用域
获取配置 config('scopes', 'demo')
设置配置 config('homoconfig','Just set a value', 'demo')
检测配置 config('?scope',null,'demo');
config助手类
获取配置 config::get('scopes', 'demo'); //第一个参数键值 第二个参数作用域
设置配置 config::set('homoconfig','Just set a value', 'demo'); //第一个参数键值 第二个参数值 第三各参数作用域
检测配置 config::has('scopes', 'demo');//第一个参数键值 第二个参数作用域
入口文件
入口文件可以改变一些系统默认的配置 必须引入/…/thinkphp/start.php 引导文件并进行安全过滤
可以参考thinkphp下base.php文件
绑定入口文件
//一个参数默认指定访问的模块 页面url需要补全控制器与方法
//两个参数第一个参数指定访问的模块 第二个参数是指定访问的控制器 页面url需要补全方法
// define(‘BIND_MODULE’,‘admin’);
// define(‘BIND_MODULE’,‘admin/Admin’);
也可以重新新建入口文件 例如接口的入口文件 用户使用接口并不希望访问index.php此入口文件 而且不想让用户访问其他模块其他的模块 地址栏也不出现其他的模块
新建api.php入口文件 提供接口 直接绑定用户所要访问的模块
//定义应用目录
define(“APP_PATH”,DIR.’/…/app/’);
//定义配置文件目录
define(“CONF_PATH”,DIR.’/…/conf/’);
//绑定模块 如果文件不存 会报错
define(‘BIND_MODULE’,‘api’);
//引入start.php
require(DIR.’/…/thinkphp/start.php’);
另一种开启config配置
//配置开启路由
//自动绑定模块 默认访问和入口文件文件相同的模块 如果文件不存在会默认访问index Index index
'auto_bind_module'=>true,
重写路由 美化路由
开启配置
//配置开启路由
'url_route_on' =>true,
//如果开启此配置所有的url都必须自己配置路由规则 默认路由规则将会失效
'url_route_must' =>false,
在conf文件夹新建路由配置 对路由进行重写
return [
'newslist/:names'=>'admin/Index/newsinfo',
// 'adminIndex/index'=>'adminIndex/index',
];
原路由 http://www.xiaoyangluntan.com/index.php/admin/Index/newsinfo/names/nuonuo
配置后路由 http://www.xiaoyangluntan.com/index.php/newslist/names/nuonuo
请求与响应
请求对象
//第一种方法直接获取
$request = request();
//第二种方法通过类调用静态方法获取
//引入请求
use think\Request; 此类为单例模式
//调用方法获取实例
$request = Request::instance();
//注入对象 常用
//引入请求
use think\Request;
//在当前方法 index(Request $request)
请求对象参数
//获取浏览器的url地址信息
//获取域名部分
// echo $request->domain();
//获取访问请求路径
// echo $request->pathinfo();
//获取访问请求真实路径
// echo $request->path();
//获取当前访问请求的类型
// echo $request->method();
//判断请求的类型 如果正确 返回bool真 否则返回bool假
// var_dump($request->isGet()); //isPost isAjax 等
//获取当前访问请求的传输的值 如果是get只包含?后见的传值 不包含路径中的参数
// var_dump($request->get()); post() session()获取session cookie 获取cookie 可以单独制定获取的参数
//获取请求路径中的参数
// var_dump($request->p