IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> ThinkPHP框架-1 -> 正文阅读

[PHP知识库]ThinkPHP框架-1

一、框架概述

1、什么是框架

框架就是一些代码类、方法(函数)、变量、常量的集合,这些代码是功能结构性的代码(并非业务代码)。业务代码其实就是具体的一些模块的增删改查逻辑代码。
使用框架开发项目,有便于代码重用、开发效率高、代码规范好、便于功能扩展等优点

2、php中的主流框架

  • 1、Zend Framework框架,PHP官方框架
  • 2、YII框架,又叫易框架
  • 3、Symfony框架
  • 4、Laravel框架,市场使用较多。
  • 5、Codelgniter框架,简称CI框架
  • 6、ThinkPHP框架,简称TP框架,常用版本:3.2和5.0*版本。
    ThinkPHP是国人自己开发的框架,有中文网、中文帮助文档、中文社区,以及丰富的百度搜索资源。所以ThinkPHP很适合作为入门级开发框架。
    这些框架大多都基于MVC设计思想和面向对象的。

mvc:
M:模型model,处理业务数据,与数据做交互。
V:视图view,显示html页面,用户能够看到并与之交互的页面。
C:控制器controller,接受请求,调用模型处理数据,调用视图显示页面
整个网站应用,分为模型、视图、控制器三大部分组成。

二、ThinkPHP框架安装

1、下载并解压框架
下载地址:https://www.thinkphp.cn/down.html
2、在WWW目录下建立文件夹tpshop,然后把thinkphp框架拷贝到该文件夹下
在这里插入图片描述

3、打开小皮面板,配置网站
在这里插入图片描述
4、打开浏览器访问配置的域名 tpshop.com
在这里插入图片描述

三、tp框架基础

1、目录结构(重点)

www  WEB部署目录(或者子目录)
├─application           应用目录
│  ├─common             公共模块目录(可以更改)
│  ├─module_name        模块目录
│  │  ├─config.php      模块配置文件
│  │  ├─common.php      模块函数文件
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  └─ ...            更多类库目录
│  │
│  ├─command.php        命令行工具配置文件
│  ├─common.php         公共函数文件
│  ├─config.php         公共配置文件
│  ├─route.php          路由配置文件
│  ├─tags.php           应用行为扩展定义文件
│  └─database.php       数据库配置文件
│
├─public                WEB目录(对外访问目录)
│  ├─index.php          入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于apache的重写
│
├─thinkphp              框架系统目录
│  ├─lang               语言文件目录
│  ├─library            框架类库目录
│  │  ├─think           Think类库包目录
│  │  └─traits          系统Trait目录
│  │
│  ├─tpl                系统模板目录
│  ├─base.php           基础定义文件
│  ├─console.php        控制台入口文件
│  ├─convention.php     框架惯例配置文件
│  ├─helper.php         助手函数文件
│  ├─phpunit.xml        phpunit配置文件
│  └─start.php          框架入口文件
│
├─extend                扩展类库目录
├─runtime               应用的运行时目录(可写,可定制)
├─vendor                第三方类库目录(Composer依赖库)
├─build.php             自动生成定义文件(参考)
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
├─think                 命令行入口文件

2、配置文件(重点)

  • 1、三个层级的配置文件:
    框架主配置文件(惯例配置文件) thinkphp/convention.php
    应用公共配置文件application/config.php,application/database.php对整个应用生效
    模块配置文件application/模块目录/config.php对当前模块生效
  • 2、其他说明:
    配置文件格式return array(键值对);
    加载顺序:框架主配置文件》应用公共配置为你按》模块配置文件
    如果要手动进行配置,一般不要修改框架本身的配置文件
    而是在应用或者模块配置文件中进行配置

3、函数文件

框架助手函数文件 thinkphp/helper.php
应用公共函数文件application/common.php
模块函数文件application/模块目录/common.php
一般不建议直接修改thinkphp/helper.php

4、开发规范(了解)

## 命名规范

`ThinkPHP5`遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范:
### 目录和文件

*   目录不强制规范,驼峰和小写+下划线模式均支持;
*   类库、函数文件统一以`.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`字段,不建议使用驼峰和中文作为数据表字段命名。

5、请求的生命周期

框架的生命周期,也就是请求的执行流程:
在这里插入图片描述

四、TP框架中的控制器

1、控制器的后缀

打开配置文件application/config.php,有如下配置

'controller_suffix'      => false,

表示默认情况下,控制器无特殊后缀。例如index控制器,文件名为index.php
如果需要进行设置,可以设置为(我们不需要这么设置)

'controller_suffix'      => 'Controller',

表示控制器以Controller为后缀。例如index控制器,文件名为indexController.php

2、控制器的定义

  • 1>定义位置及命名规则
    定义位置:application/模块目录/controller/目录下
    命名规则:控制器名称(首字母大写)+(控制器后缀,默认没有)+.php
    默认:Index控制器 index.php
    User控制器 User.php
    Test控制器 Test.php
    示例:
    在这里插入图片描述
  • 2>编写控制器
    声明命名空间 namespace app\模块目录\controller
    引入控制器基类(可选) use think\Controller; think是命名空间Controller是基类控制器
    定义当前控制器类,继承控制器基类(可选)
    示例:定义测试控制器Test.php
    在这里插入图片描述

3、框架中的命名空间

命名空间本身是PHP就有的,用来防止命名冲突问题的。
TP框架中的命名空间,通常和目录挂钩。
原因:TP中的自动加载机制,会将类的命名空间作为加载路径的一部分。

在这里插入图片描述
TP中命名空间使用:
声明命名空间 使用namespace关键字
引入指定的类 使用use关键字 命名空间\类名称
完全限定式访问 在使用类时,\完整命名空间\类名称(继承和实例化)
如果一个类没有命名空间,使用\类名

4、url访问

ThinkPHP5.0框架中,默认使用PATH_INFO方式的url进行访问。
示例:http://www.tpshop.com/index/Index/Test/index/page/10
格式:http://域名/入口文件/模块名/控制器名/操作方法名称/参数名/参数值

隐藏入口文件写法:http://域名/模块名/控制器名/操作方法名/参数名/参数值
需要对apache进行设置(手册-架构-URL访问、手册-部署-URL重写)

URL重写
可以通过URL重写隐藏应用的入口文件 index.php下面是相关服务器的配置参考:
【Apache】

  1. httpd.conf配置文件中加载了mod_rewrite.so模块
  2. AllowOverride None 将None改为All
  3. 把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下
<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

使用PHPStudy需要将public目录的.htaccess文件中,index.php后面加上?
在这里插入图片描述
使用Apache的重写机制隐藏入口文件后,如果在整个url后面加上.html后缀,让整个url看起来像是访问的静态页面。这叫做“伪静态”。

5、调式模式

(手册-错误与调试-调试模式)
默认情况下,如果代码有误(比如控制器名拼写有误),会出现以下错误
在这里插入图片描述
错误描述比较模糊,不方便进行错误调式。这种模式通常叫做“部署模式”(生产模式)。
开发阶段可以将框架设置为调试模式,便于进行错误调式:
修改项目目录\application目录\config.php

在这里插入图片描述
开启调式模式后,报错信息格式如下:
在这里插入图片描述
会提示详细错误信息和错误位置
相对于线上环境(开发完成后的阶段),叫做部署模式或者生产模式。

五、创建模块

1、创建前台和后台模块

一个典型的应用是由多个模块组成的(通常有前台网站模块和后台管理系统模块),这些模块通常都是应用目录下面的一个子目录。
每个模块都有自己独立的配置文件、公共文件和类库文件。
我们给项目创建home(前台)和admin (后台)两个模块:
在这里插入图片描述

2、设置默认访问模块

打开配置文件application/config.php,有如下配置

'default_module'=>'index',

表示默认访问模块为index模块
可以更改默认模块为home模块

'default_module'=>'home',

六、命令行创建模块目录及文件

在项目根目录执行命令(think文件所在的目录)

1、命令行创建模块目录

(见手册-命令行-自动生成目录结构)
通常可以通过一下命令,自动生成模块目录

php think build --module 模块名

比如:创建test模块,执行命令php think build --module test即可。(模块名小写)
在这里插入图片描述

2、命令行创建控制器

(见手册–命令行–创建类库文件)
通常可以通过一下命令行,自动创建控制器

php think make:controller 模块名/控制器名
php think make:controller 模块名/控制器名 --plain

加上plain 参数表示创建没有方法的空控制器类。否则控制器类中会自带一些方法。
比如:创建home模块Index控制器,执行命php think make:controller home/Index即可。
注意:控制器名首字母大写
在这里插入图片描述

3、命令行创建模型

(见手册-命令行-创建类库文件)
通常可以通过一下命令,自动创建模型

php think make:model 模块/模型名

比如:创建home模块User模型,执行命令php think make:model home/User即可。
注意:模型名字首字母大写。
在这里插入图片描述

七、Request请求类

1、获取输入变量

(见手册-请求-输入变量)
要获取当前的请求信息,可以使用\think\Request类
$request=\think\Request::instance();
或者使用助手函数
$request=request();
获取PARAM变量
在这里插入图片描述

浏览器访问效果
在这里插入图片描述

特殊说明:路由变量与get变量
http://www.tpshop.com/home/goods/index/id/100?page=10
param方法能够获取所有参数(id,page)
get方法只能获取?后面的请求字符串的参数(page)
route方法 只能获取到?前面的路由中的参数(id)

2、参数绑定

(见手册–请求–参数绑定)
方法参数绑定是把URL地址(或者路由地址)中的变量作为操作方法的参数直接传入。
操作方法参数绑定
按名称绑定
在这里插入图片描述
使用示例:home模块Goods控制器read方法中,声明$id参数
访问url中,传递id参数 http://www.tpshop.com/home/goods/read/id/100
效果:
在这里插入图片描述

3、依赖注入

(见手册–请求–依赖注入)
依赖注入:简单的说,要在一个类A中使用另一个依赖类B时,不直接在类A中实例化类B,而是先实例化类B后再以参数的形式传入类A。
操作方法注入
控制器的操作方法中如果需要调用请求对象Request的话,可以在方法中定义Request类型的参数,开启参数顺序无关。例如:
在这里插入图片描述
效果:
在这里插入图片描述

访问URL地址的时候 无需传入request参数,系统会自动注入当前的Request对象实例到该参数。
如果继承了系统的Controller类的话,也可以直接调用request属性,例如:

<?php
namespace app\home\controller;

use think\Controller;
use think\Request;

class Goods extends Controller
{
	public function create()
    {
       dump($this->request->param());
    }
}

原理分析:
分别有两个类A,B
调用B然后B里面需要用A,一般我们把A的实例化放在B里,依赖注入就是在B的方法的参数里告诉B调用前需要A的实例化,所以B会先在外边帮实例化好A。
补充说明:Request请求类中,封装了很多和请求相关的方法,详情见手册–请求。

小结:
可以找到任何一种方法接收参数

//1.获取请求对象
$request=request();
$request=\think\Request::instance();
$request=$this->request;//仅限于继承了底层控制器的情况下
public function save(Request $request)//依赖注入
	//2.接收请求参数 param方法
	$params=$request->param();
	$params=input();
	$params=request()->param();
	$id=$request->param('id');
	$id=input('id');
	public function edit($id)//参数绑定

八、ThinkPHP框架中的视图

1、视图的组成
View视图类(继承了自定义模板引擎,功能与Smarty类似)
HTML模板文件
2、模板的定义
(见手册–模板–模板定位)
为了对模板文件更加有效的管理,ThinkPHP对模板文件进行目录划分,默认的模板文件定义规则是:视图目录/控制器名(小写)/操作名(小写)+模板后缀
默认的视图目录是模块的view目录,框架的默认视图文件后缀是.html

比如home模块index控制器index方法要调用的模板定义为view/index/index.html

3、模板渲染
(见手册–视图–模板渲染,手册–视图–模板赋值)
在控制器方法中
在这里插入图片描述

九、将后台模板与框架做结合

模板整合思路:
1、确定页面的访问路径(模块、控制器、方法)
2、新建对应的控制器方法,在方法中调用模板
3、将模板页面移动到对应的视图目录下(创建子目录)
4、将静态资源文件移动到public/static/admin目录下
5、修改模板文件中静态资源路径

页面分布:
登录页 Login控制器login方法 login.html
首页 index控制器index方法 index.html

商品列表 Goods控制器index方法 goods_list.html->index.html
商品新增 Goods控制器create方法 goods_add.html->create.html
商品修改 Goods控制器edit方法 goods_edit.html->edit.html

管理员列表 Manager控制器index方法manager_list.html->index.html
管理员新增 Manager控制器create方法 manager_add.html->create.html
管理员修改 Manager控制器edit方法 manager_edit.html->edit.html

1、模板布局

(见手册–模板–模板布局)
使用模板布局,就是把多个模板页面都有的公共代码给抽取出来,放到一个公共位置开发维护
好处:相同的代码只维护一份,减少代码工作量
后台全局布局设置步骤:
1、修改配置文件application/admin/comfig.php加入以下设置

 'template'=>[
        'layout_on'=>true,//开启布局
        'layout_name'=>'layout',//布局文件名称
    ]

在这里插入图片描述
2、在public/static目录下新建admin文件夹把js\css\img等静态资源放入
在这里插入图片描述

3、在application/admin/view目录下,新建layout.html
将后台页面公共的头部、底部代码提取到layout.html中,在中间位置放一个特殊字符串“{CONTENT}”,表示此位置,替换为原始要访问的页面内容

layout.html文件中,只保留所有页面公共的css和js相关代码,修改静态资源路径
注:一定不能直接将所有的css和js都放在layout.html中,只放公共的
注:TP框架中,模板中的静态资源路径,不能使用相对路径./,必须使用/开头的路径。
在这里插入图片描述

4、临时关闭模板布局
全局布局设置,对所有页面全部生效。
特殊页面(不需要使用布局的页面),可以在控制器方法中,临时关闭模板布局。

$this->view->engine->layout(false);

比如登录页,不需要使用全局的布局

2、后台首页

1、确定页面的访问路径(模块、控制器、方法)
admin模块index控制器index方法
2、新建对应的控制器方法,在方法中调用模板

<?php
namespace app\admin\controller;

class Index
{
    public function index()
    {
        return view();
    }
}

3、将模板页面移动到对应的视图目录下
index.html=>applacation/admin/view/index/index.html
4、修改模板文件
保留页面独有的静态资源文件,以及主体部分代码

3、后台登录页

1、确定页面的访问路径(模块、控制器、方法)
admin模块login控制器 login方法
2、新建对应的控制器方法,在方法中调用模板
注:后台的登录页面,不需要使用公共布局
在这里插入图片描述
总结:
1、安装部署框架,熟悉目录结构(application public)
2、控制器定义、控制器访问(隐藏入口文件、Path_info格式化url)能够访问到指定的控制器方法
3、命令行操作(创建模块、创建控制器类)(环境变量等)
4、Request请求对象基本使用-接收参数(熟练一种写法)
5、模板整合(模板布局)

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 18:37:48  更:2021-11-16 18:38:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:31:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码