ThinkPHP5.0学习

ThinkPHP简介

         ThinkPHP5 是上海顶想信息科技有限公司于2006年创立的,经过长期的升级和维护是目前国内使用最多的PHP框架,2016年thinkPHP发布了5.0版本,ThinkPHP5.0版本是一个颠覆和重构版本,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化,包括路由、日志、异常、模型、数据库、模板引擎和验证等模块都已经重构。

特点:

   1.ThinPHP是免费开源的,快速简单的,面向对象的,轻量级PHP开发框架
   2. 2006年初创立,遵循Apache2开源协议发布
   3. 秉承简洁实用的设计原则,注重易用性
   4.拥有众多的原创功能和特性,在易用性,扩展性和性能封面不断优化和改进

   5.成为国内最领先和最具影响力的WEB应用开发框架

一    开发环境安装
      PHP>=5.4.0
      PDO MbString CURL PHP Extension
      Mysql 5.5以上

      Apache Nginx

   安装三种方式

   1. git  2  composer方式   3.官网下载

二  MVC介绍

初探TP5---URL路由---请求响应--模板视图
MVC优势:耦合性低,重用性高,可维护性高,有利于软件的工程化
MVC的变形
1.五Model模式的web开发
2 五View模式的Api接口开发

3.Model再分层和Controller再分层

三 Tp5目录和规范

   1.目录结构

-application 应用目录(几乎整个项目的内容都写在这里)
|-index(这里的文件夹tp5叫做模块-----一般是前台模块,也可以根据需要需求修改成其他(例如:home),需要修改配置文件,修改默认模块、控制器、操作)  【注】:TP5默认只有一个index文件(模块)和一个控制层(conrroller),我们在写代码的时候会自己新建一个model和view,这样就组成了这个Index模块儿的MVC(controller控制层,model模型层,view视图层),如需后台(一般来说都需要),则需要新建一个后台模块(admin)
|-controller(控制层)
|-model(模型层)
|-view(视图层)
|-admin(后台模块)
|-controller(控制层)
|-model(模型层)
|-view(视图层)


|- command.php 是控制台的配置文件,当我们用命令行执行thinkphp的时候,它会读取command.php的配置


|- common.php 它是项目的公共文件,当我们编写一些通用函数的时候,比如我们写一个函数,想在所有的模块儿中都能调用,那么我们就可以把函数写在改文件中,它就可以注册到全局,在任何地方都可以调用


|- config.php 它是应用的配置文件,整个用用都读取这个配置,也就是admin模块儿和index模块儿会通用这个配置


|- database.php 它是数据库配置文件,如果我们需要连接数据库,那么我们只需要修改database.php的配置就可以了


|- route.php 它是路由文件,当我们想对URL进行美化,那么我们就可以修改此文件,对其增加一些路由配置,就可以达到美化的效果


|- tags.php 它是应用行为扩展文件,在thinkphp中,它为我们埋下了很多钩子,我们可以对框架进行扩展,而不需要修改框架本身的源码,我们需要在某一个钩子上注册某些函数,或者是注册某些行为,来通过行为来改变框架的执行流程
|-extend  目录,这个目录是我们下载第三方库时候使用的,当然我们不是通过composer来下载的,比如说我们有一个第三方库,我们用着比较好用,但是它没有composer包,我们就可以将类库下载到extend目录,之后我们修改一下命名空间,就可以直接在我们的应用中使用
|-publiic 我们网站的根目录,也就是说我们网站根目录下所有的这些文件都是允许访问的
|-static 主要用来放静态文件,比如说css,js,图片等等
|-index.php 整个网站或整个应用的入口文件,所有的请求都会经过index.php之后再去转发
|-router.php 它是框架快速启动的测试文件,比如你本地没有安装Apache,只安装了PHP,那么我们可以同过,PHP内置的workserver来启动,通过这个文件,我们就可以启动这个框架


|-runtime 它是网站运行中的缓存文件,它包括日志,缓存和编译文件等等。
|-thinkphp 它是框架文件,也就是说thinkphp5的框架都在里边
|-lang 里边是语言包
|-library 目录是框架的核心,它里边有think(它是整个框架的核心文件)和traits(它是类库的扩展)两个目录
|-think Think 类库包目录
|-traits 系统 Traits 目录
|-tpl 是我们框架默认的一些模板(了解知识)
|-default_index.tpl 它是我们自动生成的控制器模板文件


|-dispatch_jump.tpl它是我们网站发出成功或失败的中间跳转文件


|-page_trace.tpl它是我们调试时显示的模板文件


|-think_exception.tpl它是我们抛出异常时页面展示的文件
|-base.php 定义一些常量
|-console.php 它是控制台的入口文件
|-convention.php 是框架惯例配置文件
|-help.php 助手函数
|-start.php是框架启动文件

|-vendor 是composer安装过程中生成的目录,通过composer安装的所有类库都被安装在了这个目录中

ThinkPHP5.0学习_第1张图片

  2.TP5开发规范:

        *   目录命名、配置参数、非类库文件名、表名、字段名:小写+下划线
*   类文件名和其内的类名:驼峰,首字母大写,两者名字要一样
*   函数、属性名:驼峰,首字母小写
*   常量:大写字母+下划线
*   类文件名均以.php结尾
*   类文件的命名空间和类文件所在的路径一致
*   以双下划线__开头的函数或方法为魔术方法

*   应用的类库文件的命名空间,最顶级的统一为app

   五  ThinPHP5模块设计
     
  common继承
      ThinkPHP5配置
thinkphp提供两种获取和设置配置的方式,一种是通过think下的config类进行改变,另一种是通过config初始函数来进行设置和改变;config初始函数其实就是think下config类或者是封装。

位于 Thinkphp下的convertion文件里面  config()

定义整个框架系统的配置文件目录

  1.在public目录下,打开index.php,在代码中define(‘CONF_PATH’,__DIR__.'/../conf/')
  2.tp5提供了一个获取框架配置参数(惯例配置)的助手函数 config(),这个函数返回的配置参数来源于thinkphp目录下的convention.php文件

1.php应用配置

2 查惯例配置
在APP模块文件(如index(模块文件名)/Index(类名)/index.php)中写
dump(config());在浏览就可以看惯例配置,惯例文件是在thinkphp框架文件夹中的convention.php
应用配置
在APP(应用目录)同一级下建conf文件夹并在此文件夹中建config.php文件:写相应的配置(如:return['app_debug'=>'ture','app_name'=>'nihao'])
并在根目录下的入口文件(app/public/index.php)加入如下代码:
defile('CONF-PATH',__DIR__ . '/../conf/')

3扩展配置

4.场景配置
 (1)场景配置:不同办公环境中,使用不同配置
 (2)config下新建不同办公环境配置文件,eg:设置在家办公环境home.php;公司办公环境  office.php; 
 (3)在config.php设置数组‘app_status’=>'home'/'office'  
 (4)如果需要在不同环境中配置不同的数据库设置,需要把整个数据库的设置拷贝到数组下

5. 模块配置
  1.之前的扩展配置和场景配置都是相对应用级别的,而模块配置是相对模块级别,作用域不同
  2.实现的方式
    a.在conf目录下建立与app目录下模块名相同的目录,该目录下在创建config.php文件,那么这个文件中的配置参数只在访问  对应的app模块的时候生效
6 动态配置

7 Config类和助手函数config

Congfig::set("名","值","模块")
Congfig::get("名","值","模块")
对应模块的才能获取到
Config::has("名"),不存在和null都返回false

8 环境变量配置和使用

入口文件
单入口文件的定义: 应用程序所有的http请求都由一个文件接收并由该文件转发到功能代码中
单入口文件:安全检测,请求过滤,
tp5定义的常量一般都存放在thinkphp框架目录下base.php中

9 隐藏文件

隐藏入口文件
  1.什么是隐藏入口文件:其实就是将入口文件index.php不显示在路由中,例如:在不开启隐藏入口文件设置下,需要访问应用默认的index方法,需要这样写:localhost/index.php/index/index/index,如果开启隐藏入口文件设置,那么将index.php拿掉也是可以访问
  2.如何来设置隐藏入口文件:apache提供重写静态规则在public目录下创建.htaccess文件,默认apache会去访问这个文件,实现隐藏的需求;nginx需要在nginx.conf文件中配置静态规则

10 入口文件绑定
define('BIND_MODULE','admin');
在public下可创建多一个入口文件,可实现不同入口文件访问不同模块。
tp框架提供了一个入口文件自动绑定功能 "auto_bind_module"=> true,入口文件名与模块文件名相同时,自动访问与之对应的模块。等同于在  admin,php中定义 define("BIND_MODULE","admin");
 绑定模块一般适用于小型企业网站,一个控制器够用的情况,大型项目不建议使用。


绑定模块方法1:
tp\public\index.php入口文件指定默认模块
define('BIND_MODULE','admin');//绑定admin模块,可以访问控制器->方法


11 路由
在config.php中配置
// 是否开启路由
"url_route_on"   => true,
同级目录下创建 route.php文件,把需要更换的目录地址替换,而原先的地址已经不可以访问
// 是否强制使用路由
"url_route_must"  => false
当开启强制路由,一定要用路由

六 请求

获取Request对象的3种方法:
1.助手函数request(). $req = request(); 
2.用think下的request类. (单例模式)
    use think\Request;
    $req = Request::instance()
3.也要引用think下的Request.
public function index(Request $req){
    dump($req);
}

1 视图 
通过控制器 渲染视图 传参

Index控制器下的index()方法渲染view/index/index.html

return view('index',['参数名'=>'参数值'],['被替换的值'=>'欲替换的值']);

如:
return view('index',['a'=>'10'],['Hi'=>'HelloWorld']);
在index.html 中
{$a} 输出 10
Hi 输出 HelloWorld
2、视图路径
view('page_1')或view('page_1.html')  对应 view/控制器名/page_1.html
view('hello/page_2')  对应 view/hello/page_2.html
view('./page_3.html') 对应 public/page_3.html

3、使用controller类(该类不是必须的,但如果需要调用该类的方法,则必须继承)
use think\controller;

class 类名 extends controller

$this 表示已继承的controller的类对象

$this->assign(变量名,值);
$this->display(值,[keyValue数组]);

4 变量的输出,赋值和替换

thinkPHP向页面赋值有四种方式:(需要先继承Controller)

1. $this->assign('key', 'value');

2. $this->view-> key = 'value';

3. $this->fetch('html模板名', [
       'key'   => 'value',
       'key2' => 'value2'
]);

4. View::share('key', 'value'); # 使用该方法必须先 use think\View;

5-3 系统变量原生标签
1.在模板中使用系统变量,格式形如: {$Think.xxx.xxx}。
eg:  {$Think.server.HTTP_HOST}
{$Think.env.PHP_APP_STATUS}
{$Think.session.name}
{$Think.cookie.uid}
{$Think.get.sid}
{$Think.request.sid}
{$Think.post.id}
{$Think.const.APP_PATH} // 获取系统常量
{$Think.APP_PATH} // 获取系统常量,可省略const,直接加常量名

模板变量
模板循环便签
volist:一般循环select结果(二维数组)
* 格式:{volist name="list" id="a"}

{$a.email}

{/volist}
* 参数说明:
* name:控制器中分配的数组变量名
* id:当前循环变量名,一维的key
* offset:偏移量,表示从指定单元位置开始遍历。数组第一个单元为0。
* length:遍历次数
* mod:当前的单元位置对mod值取余。数组第一个单元位置为0。
* key:默认为i,可自定义,是代表循环第几次
* empty:定义当数组为空的情况下的说明文字,可以是字符串也可以是变量(变量建议在控制器内分配,在变量内可使用html标签),字符串的时候不能直接使用html标签。
* 可以直接使用$key输出索引,也就是数组下标名
foreach
* 第一种最简单的格式: {foreach $list as $vo}

{$vo.email}

{/foreach}
* 第二种格式:{foreach name="list" item="vo"}
* 可以直接输出索引$key,也可以在foreach里面定义 key="s"来定义索引变量名
for
* 格式:{for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" } {/for}
* comparison默认是lt,也就是小于,start小于end
* step默认是1
* name默认是i,可以修改
* 等同于 for($i=1;$i<10;$i++)

比较标签

相等:eq标签(也可以写equal),用法是 {equal name="a" value="6"}相等{else/}不相等{/equal},name是控制器分配的变量名,value是要对比的值(也可以使用模板分配的变量),else是取反,一定要加斜杠
不相等:neq标签(也可以写成notequal),用法同上
大于:gt标签,用法同上
小于:lt标签,用法同上
大于等于:egt标签,用法同上
小于等于:elt标签,用法同上
 {switch name="Think.get.level"}
 {case value="1"}普通会员{/case}
 {case value="2"}2普通会员{/case}
 {case value="3"}3普通会员{/case}
,用extend继承 name='目录',后面没有后缀名,{block name=''}{/block}方法来修改
2{__block__}能    输出原来模板内容

3,layout 'layout_on' =>'true' 'layout_name'=>'a'开启后默认的访问view文件机制发生变化,会访问view/a.html,a.html 中的{__CONTENT__}的内容会被index控制器下指定方法对应view/index/*.html文件内容替换,通过给方法传递参数() a.html可以显示不同的内容

以上内容根据视频摘录

你可能感兴趣的:(PHP,php,框架,ThinkPHP5.0)