框架简介
常见PHP框架:yii,Symfony,Laravel,CodeIgniter
Larvavel,最优雅
YII,效率最高
主要特性 https://www.kancloud.cn/manual/thinkphp5_1/353946
历史漏洞 Think PHP漏洞总结(全系列):https://www.cnblogs.com/lingzhisec/p/15728886.html
安装 https://www.kancloud.cn/manual/thinkphp5_1/353948
应用项目
地址: https://github.com/top-think/think ,下载5.1.29,命名为tp5
git clone https://github.com/top-think/think tp5
cd tp5
git checkout v5.1.29
核心框架
进入上方tp5,下载5.1.29,命名为thinkphp。下载地址: https://github.com/topthink/framework 。
确认安装成功:1. 配置网站
域名:tp5.local
根目录tp5/public/
2. hosts文件绑定:127.0.0.1 tp5.local
3. 尝试访问http://tp5.local,确认图标
URL访问
http://serverName/index.php(或者其它应用入口文件)?s=/模块/控制器/操作/[参数名/参数值...]
http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值...]
一般通过中间件URL重写规则,可以配置成:
http://serverName/模块/控制器/操作/[参数名/参数值...]
URL和代码关系
模块(文件夹)=》控制器(文件及类)=》操作(方法)
http://tp5.local/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值...]
http://tp5.local/index.php/Index/Index/index
关键配置:
config文件夹下面,与public同级
1. config/app.php
- app_debug
- app_trace
- default_module
- default_controller
- default_action
- var_pathinfo
- pathinfo_depr
- http_agent_ip
2. config/database.php
- hostname
- username
- password
- database
- charset
架构MVC是一种开发结构合理、能使前后端分离、流程控制逻辑、业务逻辑调用与展示逻辑分离,实现高内聚, 低耦合的设计模式。
M:数据实体模型(Model或Entity):每一个类的成员变量字段对应数据库字段对应,提供数据的CRUD操 作,实现数据库的持久化。
V:视图(View):视图层:客户端用户能直接看到的页面,主要负责视图的展示。视图层调用控制层 (HTML、php等文件)。
C:控制 (Controller):前端视图层的参数提交和页面的响应,都委托给前端处理器处理。
MVC开发重点:
Controller控制器:新建、编写:模块(文件)=》控制器(类)=》操作(方法)
例如:/application/index/controller/Index.php
View视图:编写前端HTML模板
Model模型:全称是数据模型。负责编写数据库表结构、增删改查的代码
第一个TP应用代码
建立模块(文件夹)=》控制器(文件和类)=》操作(方法)
要求
编写一个获取用户名并显示的代码。
分析
模块:不需要新建应用,所以复用index模块文件夹,控制器控制的对象:user文件和类名,对对象的操 作:get_name方法
步骤
- 复用已有模块Index
- 新建User控制器User.php
- 新建get_name方法
代码示范
<?php
namespace app\index\controller;
class User
{
public function get_name($name = 'ThinkPHP5')
{
return $name;
}
}
访问地址:1. http://tp5.local/index.php?s=/index/user/get_name/&name=687
2. http://tp5.local/index.php/index/user/get_name/name/687
3. http://tp5.local/index.php/index/user/get_name/name/687.html
请求对象提供及调用
提供变量参数对
&var1=par1……
调用
多种方法调用
响应
用原生echo
直接return
调用response()->data()
视图:
视图(html模板)通常与需要控制器的操作相对应,包括目录结构。
如果需要对Index模块下的user控制器类的get操作建立视图,视图目录结构可能为下:Index/view/user/get.html
创建和渲染:
Q:如何获得一个可供渲染的视图?如何渲染:任务:创建一个与某个操作对应的html模板文件,并且渲染
1. 模块下创建“view”视图文件夹
2. view中创建控制器同名文件夹
3. 上面同名文件夹下创建操作名同名的html文件
4. 浏览器访问操作函数
demo控制器:
public function get()
{
return $this->fetch();
}
demo模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>视图的第一个html模板</title>
</head>
<body>
<h1>我就是这个模板</h1>
模版?
</body>
</html>
从控制器获得变量内容
1. 模板渲染this->assign(<>)
2. 助手函数 view(, [关联数组形式的变量参数对])
3. 渲染内容 this->display(, [关联数组形式的变量参数对])
Q:如何从后端控制器获取变量的值(参数)?
Q:如何从后端控制器获取变量的值(参数)? 任务:创建一个与某个操作对应的html模板文件,从控制器传递参数给视图文件夹中的html模板文件并 且渲染。
1. 前端视图中的html模板文件中用{}将想要获得的变量(要加$)括起来;
2. 后端通过$this->assign()方法传入变量参数对
3. 浏览器访问操作函数
demo控制器
public function get($user="张三")
{
$this->assign('name', $user);
return $this->fetch();
}
demo模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>视图的第一个html模板</title>
</head>
<body>
<h1>我就是这个模板</h1>
你们能看见{$name}吗?
</body>
</html>