《ThinkPHP5框架全册教案完整版教学设计.docx》由会员分享,可在线阅读,更多相关《ThinkPHP5框架全册教案完整版教学设计.docx(74页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ThinkPHP5框架原理与实战全册教嚎教学设计课程名称:ThinkPHP5框架原理与实战校语年级:2019年级授课学期:2019学年第一9期教师找名:某孟老师年 月曰 器、商品属性控制器等。在工程中,通常将每个模块单独放在一个目录下, 在目录中保存和模块相关的控制器、模型和视图等文件。操作:在一个控制器中,会提供一些具体的操作。例如,商品信息控制器中的 操作有商品信息查询、商品信息修改、商品信息添加、商品信息删除等。在 工程中,操作就是定义在控制器类中的方法。案例演示如何在入口文件中获取请求信息,并根据请求信息找到对应的模块、 控制器和操作。 修改public/index.php文件,添加如
2、下代码。?php$pathinfo = isset($_SERVER,PATH_INFO,) ? $_SERVERPATH_INFO : n; echo $pathinfo; 在public目录下创立student目录表示student模块,然后在student目录中创 建controller、model和view目录,将原有的文件放入相应目录下面。public/student/controller/StudentController.php public/student/model/StudentModel.php public/student/view/student.htmlpublic
3、/index.php修改public/index.php文件,从$pathinfo中提取出模块、控制器和操作。$action();修改public/student/StudentController.php文件中的模型路径和视图路径。 public function index()equire MODULE_PATH . model/StudentModel.php1; / 修改模型路径 $model = new StudentModel();$data = $model-getAll();require MODULE_PATH . View/student.html; / 修改视图路径 )通
4、过浏览器访问 :/mytp.test/index.php/student/student/index,如果能看到学 生信息的输出结果,说明程序已经执行成功,已经实现了通过统一入口文件 index.php进行访问,也可以尝试创立goods模块Goodsinfo控制器add操作, 来测试是否能够正确访问。路由路由的实现原理 Web开发中的路由可以简单理解为URL到具体模块、控制器和操作的映射。 ThinkPHP中,开发人员不需要专门定义路由规那么,框架会自动识别URL地址 中的模块、控制器和操作。假设定义了路由规那么,可以使工程的URL更加灵活。 在ThinkPHP中,访问一个控制器中的方法,可以
5、通过3种方式访问,分别是: 完整URL、隐藏入口文件的URL、自定义短URL。 完整URL:完整URL可以直接找到入口文件index.php ,然后对 :/mytp.test/index.php/index/user/login进行路由规那么匹配。由于在路由表达 式中没有定义index/user/login的映射地址,因此路由规那么没有生效,最后由 框架的自动路由机制识别为index模块User控制器login操作。 隐藏入口文件的URL:利用Apache的URL重写功能可以在URL中隐藏入口 文件index.php,然后对index/user/login进行路由规那么匹配,和完整URL 一样
6、, 路由规那么没有生效,由框架自动路由机制识别为index模块User控制器login 操作。 自定义短URL:在URL重写后找到index.php,然后对login进行路由规那么匹 配,通过路由表达式获得路由地址index/User/login,然后找到了 index模块 User控制器login操作。 利用URL重写功能可以隐藏URL中的入口文件index.php,然后通过路由功 能可以进一步缩短URL地址。从用户体验来说,一个短的URL更有利于用 户记忆。隐藏入口文件。 在URL中,index.php是工程的入口文件,为了让URL更加简洁,通常会省 略URL中的入口文件。例如,用户登录的
7、URL为 :/localhostZindex.php/index/user/login,由于这个地址比拟长,不利于记忆, 希望换成一个简化地址 :/localhost/login 0使用Apache的重写功能隐藏入口文件index.phpo重写功能可以打破URL和 文件的对应关系,实现自定义URL的效果。假设要使用重写功能,需要在Apache 配置文件 d.conf中开启rewite模块,在配置文件中搜索“LoadModule rewrite_module”找到加载模块的配置,取消“#”注释,开启rewrite模块后,重 启Apache服务,就可以通过编写配置实现重写。 但由于直接在Apach
8、e配置文件中编写重写配置比拟麻烦,每次修改配置都需 要重启Apache才会生效,一旦配置有误将无法启动,所以推荐将重写的配置 写在分布式配置文件.htaccess中。在C:/web/www/mytp/public目录中创 建.htaccess文件,具体代码如下。Options 4-FollowSymlinks -MultiviewsRewriteEngine OnRewriteCond % REQUEST_FILENAME !-dRewriteCond %REQUEST_FILENAME !-fRewriteRule 八(.*)$ index.php/$l QSA,PT,L在C:/web/ww
9、w/mytp目录下创立叩plication目录,将原来的public/student目 录放入application目录中。经过调整后,新的目录结构如下,将控制器、模 型和视图文件放在application目录中后,public目录只有入口文件index.php 提供对外访问,这样的目录结构平安性更高,并且不影响重写功能。application/student/controller/StudentController.php application/student/model/StudentModel.php application/student/view/student.htmlpubli
10、c/index.php public/.htaccess将index.php中的模块路径修改为上级目录下的application目录中。 define(MODULE_PATH, ./application/. $module .7); 通过浏览器访问 :/mytp.test/student/student/index,测试在 URL 中隐藏入口 文件的功能是否生效。 ThinkPHP中的路由ThinkPHP5.1中的路由功能非常强大,不仅可以让复杂的访问简单化,而且支 持多种定义方式。 ThinkPHP工程目录下的route目录用于存放路由定义文件,该目录下所有的路 由定义文件都会被加载,默认
11、的路由定义文件为route.phpo使用Route:rule()定义路由,Route是ThinkPHP中的路由类,该类提供了 rule() 方法用来注册路由规那么,其基本语法格式如下。Route: :rule。路由表达式7路由地址请求类型);演示一些典型的配置。Route:rule(7 Index/indexZ*);/ 将首页路由到 index2()方法Route:rule(hello 1 admin/index/hello);/ 将 hello 1 路由到 admin 模块Route:get(hello2 Index/index/hello1);/ 定义 GET 路由规那么Route:pos
12、t,heHo3index/index/hello);/ 定义 POST 路由规那么Route:lanyCelk1, index/index/hello);/所有请求类型都支持的路由规那么在路由表达式中传递固定参数和可选参数,传递固定参数并不是指URL中传 递的参数,而是在路由地址中为指定的操作方法传入参数,在访问的URL中 是不可见的,能起到一定的平安保护作用;传递可选参数,可以用符号 表示可选参数,可选参数必须放在必选参数的后面,如果中间使用了可选参 数,后面的参数都会变成可选参数。Route:iruleCser/iid1, ,index/detail?name=test,);传递固定单数R
13、oute:ruleCuser/:id/:name/:age Jindex/detail); /传递可选参数 age 为可选参数 Route:rule(user/:id/:name/:age, 4ndex/detaif); /name 和 age 均为可选参数使用闭包方式定义路由,不需要指定对应的控制器和操作方法,将需要执行的 代码直接写在闭包函数中即可,用于满足有特殊需求的访问。Route:get(hello/:name, function ($name) return Hello,1. $name;);使用数组方式定义路由,数组的键和值与Route:get()的前2个参数相同,考 虑到框架后
14、期的版本升级,建议尽量使用Route类的方法注册路由规那么,数 组方式定义路由将在后续的版本中取消,不再使用。return ,hello/:name, = 4ndex/hello1;三、归纳总结,布置课后作业(1)回顾上课前的学习目标,对本节课知识点进行总结。(2)使用博学谷系统下发课后作业。第二学时(命名空间、自动加载)一、提出需求,导入学习任务(1)回顾上节课的内容,框架的基础知识,引出本节课要讲解的内容。(2)明确学习方向。【知识点】命名空间的定义命名空间的使用注册自动加载函数注册自动加载方法【能力点】掌握命名空间的使用掌握自动加载的使用二、明确目标,完成任务实现 命名空间 命名空间的定
15、义。 PHP中命名空间使用关键字namespace定义,基本语法格式如下。 namespace空间名称;空间名称遵循基本标识符命名规那么,以数字、字母和下划线构成,且不能以数 字开头。如果一个脚本的开始处需要定义命名空间,除PHP提供的declare 语句外,命名空间必须是程序脚本的第1条语句,如果在PHP开始标记前有 空格等都会报“Fatal error”错误提示。 定义子命名空间PHP命名空间允许指定多层次的命名空间,通常把这种用法 称为定义子命名空间。set(name, iaoming*);$config-set(name, iaoming*);/修改配置$config-get(,nam
16、e,);/读取配置/ 使用 FacadeConfig:set(,name, iaoming);Config:set(,name, iaoming);/修改配置Config: :get(,name,);/读取配置 使用Facade后,直接调用Config类的静态方法set() get()就能完成原本需要 通过实例对象$config才能完成的操作。这种方式并不是在Config类中定义了 set()和get。这两个静态方法,而是专门创立了 Config类的静态代理类,由静 态代理类提供非静态方法的静态访问。 通过代码演示Facade类的具体实现。三、归纳总结,布置课后作业(1)回顾上课前的学习目标,
17、对本节课知识点进行总结。(2)使用博学谷系统下发课后作业。第二学时(反射)一、提出需求,导入学习任务(1)回顾上节课的内容,引出本节课要讲解的内容。反射是PHP针对面向对象编程提供的一种“自省”的过程。可以将其理解为根据“目 的地”找出“出发地或来源:例如,可对一个对象进行反射,从而找到其所属的类、拥 有的方法和属性、方法的参数、文档注释等详细信息。本节将针对反射进行详细讲解。(2)明确学习方向。【知识点】反射API反射的使用自定义实例化【能力点】掌握反射API的使用利用反射实现参数绑定利用反射实现依赖注入二、明确目标,完成任务实现 反射 反射API在PHP中使用反射,主要通过反射API来完成
18、。列举反射API提供的常用的 相关类与接口。 反射主要用于框架或插件的开发,在平常的开发中并不常见。例如,ThinkPHP 中利用反射在自动加载时进行参数绑定和查找对象的来源。它主要可实现对 象的调试、获取类的信息。虽然合理利用反射可以保持代码的优雅和简洁, 但是反射因其特性会破坏类的封装性。 通过案例演示如何使用反射获取类属性的信息。 利用反射实现参数绑定在学习了反射API后,下面在mytp.test工程中,完善Container类中的 invokeClass。方法,实现将传入的数组$vars绑定给$class类的构造方法。 利用反射实现依赖注入在前面的开发中,依赖注入是手动将方法中依赖的实
19、例注入的,而在ThinkPHP 中,依赖注入可以由容器自动完成。在学习反射之后,已经可以实现自动依 赖注入了,通过代码演示实现。 自定义实例化 在进行自动依赖注入时,类的实例是自动创立的,如果类的构造方法需要传入 参数,在自动创立时无法传入参数。为此,ThinkPHP提供了自定义实例化功 能,就是在类中定义一个_make()静态方法,在这个方法中创立自身实例, 在创立时可以传入所需的参数。创立完成后,将实例返回给调用者。 通过代码演示自定义实例化的实现原理。三、归纳总结,布置课后作业(1)回顾上课前的学习目标,对本节课知识点进行总结。(2)使用博学谷系统下发课后作业。第三学时 (配置文件) 一
20、、提出需求,导入学习任务(1)回顾上节课的内容,引出本节课要讲解的内容。在设计一个PHP框架时,考虑到框架的通用性,通常会提供一套配置文件,用来 对框架的功能进行调整,以应对各种需求场景。本节将针对配置文件进行详细讲解。(2)明确学习方向。【知识点】配置文件的设计配置的读取和修改【能力点】掌握配置加载的顺序掌握配置的读取和修改二、明确目标,完成任务实现配置文件配置文件的设计 在第一章中使用ThinkPHP开发工程时,除了对数据库配置文件config/database.php进行修改以夕卜,并没有改动过其他配置文件。在ThinkPHP 的config目录中,可以看到有如下配置文件。app.php
21、 cache.php console.php cookie.php database.php log.php middleware.php template.php trace.php应用配置 缓存配置 控制台配置 Cookie酉己置 数据库配置 日志配置 中间件配置 模板引擎配置 Trace配置 针对不同的需求场景,ThinkPHP的配置划分了 4个层级,按照加载顺序排列如下。惯例配置-应用配置一模块配置-动态配置在以上4个层级中,当框架启动后,最先读取的是惯例配置,随着应用的启动, 读取应用配置,再根据用户的请求找到对应的模块,读取模块配置,最后是 在某个控制器的方法中,动态地获取或更改配
22、置。针对这4个层级的配置分 别进行介绍。惯例配置:它是框架内置的配置文件,位于thinkphp/convention.php,用户无 需对其更改。应用配置:位于工程的config目录中,它是应用的全局配置文件。模块配置:模块的配置文件,位于模块目录下的config目录中,其作用范围 只在模块内有效。动态配置:在某个控制器的方法中进行的配置,只在当前请求内有效,不会 保存在配置文件中。补充讲解:ThinkPHP5.l允许将模块配置放在“config/模块名”目录中,从而将 所有的配置文件都放在config目录下统一管理。如果存在“config/模块名”目 录,就会到该目录中读取配置文件,不再从原
23、来的位置(即application/模块 名/config目录)读取配置文件。 配置的读取与修改 理解了 ThinkPHP中的配置文件的设计思想后,接下来通过案例演示在 mytp.test工程中编写代码,完成框架中的配置文件的读取与修改功能。第四学时(请求和响应)一、提出需求,导入学习任务(1)回顾上节课的内容,引出本节课要讲解的内容。ThinkPHP5相比之前的版本增强了对API开发的支持。API开发主要用于为各种前 端应用(包括网页、客户端软件、手机APP、微信小程序等)提供数据交互的接口。 为了方便API开发,ThinkPHP5提供了 Request和Response类,在对请求和响应的
24、处 理上更加灵活。本节将对请求和响应进行详细讲解。(2)明确学习方向。【知识点】路由检测请求分发输入过滤响应处理中间件【能力点】掌握对API请求和响应的处理掌握中间件的使用二、明确目标,完成任务实现 请求和响应路由检测 在前面已经学习了单一入口框架需要使用路由将请求URL分发到具体的模 块、控制器和操作。目前已经完成了 mytp框架的初始化代码,通过案例实现 路由检测功能。 请求分发成功获取到了用户请求的模块、控制器和操作的名称,然后就可以根据这些名 称找到对应的模块下的控制器类和方法,调用方法来执行操作了,通过代码 演示。 输入过滤在工程开发中,经常需要接收来自 协,议的GET、POST方式
25、发过来的数 据,在接收时,为了程序的严谨性,通常需要对数据进行一次过滤,例如代 码如下。在Request类中编写get。、post。方法实现对请求数据过滤。 响应处理在传统的网页开发中,开发人员并不需要关注对响应的处理,一般来说响应的 结果就是一个HTML网页,对于响应头、响应状态码等信息由Web服务器来 自动发送即可。而在进行API开发时,那么有可能会遇到发送自定义的响应头、 响应状态码的情况,为此,ThinkPHP提供了 Response响应类,专门负责响 应消息的处理。在前面的开发中已经编写过Response类,但功能比拟薄弱, 通过代码对Response类进行强化,提供自定义响应头和响应状态码、自定义 响应数据格式等功能。 中间件Thi