thinkphp框架及应用代码审计(上)

框架简介

常见PHP框架:yii,Symfony,Laravel,CodeIgniter

Larvavel,最优雅

YII,效率最高

https://www.thinkphp.cn/doc

主要特性 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>

  • 31
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值