ThinkPHP
ThinkPHP5的运行环境要求PHP5.6以上,兼容PHP8.0.
一、开发前的准备
1.1 编辑器的安装
推荐安装 Vscode 或者 sublime Text 编辑器去写php代码。
1.2 php集成开发环境安装
集成开发环境包括:
- Linux、
- Apache
- MySQL
- PHP
推荐安装phpStudy或者XAMPP 、Wampserver、LAMP、宝塔面板等集成工具搭建php环境。
1.3 composer安装
composer是 PHP 用来管理依赖(dependency)关系的工具。可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件
composer 1.xxx 被弃用了,要使用2.xxx的版本
Composer 最新稳定版本:2.7.2
1.4 php vscode插件
二、搭建项目
2.1 安装
1.以phpstudy集成环境为例,在项目根目录www文件下,用终端运行下面命令,会创建一个tp5的项目
composer create-project topthink/think=5.1.* tp5
2.更新框架
composer update topthink/framework
2.2 开发规范说明
1.类文件采用驼峰法命名(首字母大写)
例如控制器文件,就用驼峰法,还有模型-model、验证器-validate、中间件-middleware都是采用驼峰法命名
2.其他文件采用小写+下划线命名
例如视图文件(View),模板等都是采用小写+下划线命名
3.数据库和字段采用小写加下划线方式命名
数据表 小写加下划线方式命名
字段 ,小写加下划线方式命名
2.3配置
在项目根目录,创建一个.env环境变量文件,在开发时模拟环境变量配置,正式上线后关闭(改为false或者删除),.env文件中的配置参数定义格式采用ini方式
APP_DEBUG = true
APP_TRACE = true
DATABASE_USERNAME = root
DATABASE_PASSWORD = 123456
3、 用命令生成目录文件
php think run //启动内置服务器
php think version //查看版本
php think build --module admin //快速生成admin模块
php think make:controller admin/User //生成admin模块的User控制器类
php think make:model admin/User //以生成admin模块的User模型类
php think make:validate admin/User //生成admin模块的User验证器类
php think make:middleware Auth //生成一个中间件类
4、模板
1.模板输出替换
在template.php配置文件中添加:
'tpl_replace_string' => [
'__STATIC__'=>'/static',
'__ADMIN__' => '/static/admin',
'__HOME__' => '/static/home',
],
2.常用的标签
循环标签
- foreach 用于循环输出数组或者对象的属性
- volist 用于查询数据集或者二维数组的结果输出
- for
条件判断标签
- switch
- if
{foreach $list as $key=>$vo }
{$vo.id}:{$vo.name}
{/foreach}
{volist name="list" id="vo"}
{$vo.id}:{$vo.name}<br/>
{/volist}
{switch 变量 }
{case value1 }输出内容1{/case}
{case value2}输出内容2{/case}
{default /}默认情况
{/switch}
{if ( $name == 1) OR ( $name > 100) } value1
{elseif $name == 2 /}value2
{else /} value3
{/if}
3.模板继承
模板继承是一项更加灵活的模板布局方式
每个区块由{block} {/block}标签组成
base.html文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{block name="title"}标题{/block}</title>
</head>
<body>
{block name="menu"}菜单{/block}
{block name="left"}左边分栏{/block}
{block name="main"}主内容{/block}
{block name="right"}右边分栏{/block}
{block name="footer"}底部{/block}
</body>
</html>
index.html文件
{extend name="base" /}
{block name="title"}{$title}{/block}
{block name="main"}
{volist name="list" id="vo"}
<a href="/new/{$vo.id}">{$vo.title}</a><br/>
{$vo.content}
{/volist}
{/block}
{block name="footer"}
{__block__}
@ThinkPHP 版权所有
{/block}
表示引用所继承模板对应区块的内容到这个位置,最终这个区块是合并后的内容
5、视图
1.模板渲染
1.fetch 渲染模板方法
2.view 助手函数
3.display 渲染内容
要使用fetch、display方法,必须继承基类Controller
fetch('[模板文件]'[,'模板变量(数组)'])
助手函数:不需要继承基类Controller
view('[模板文件]'[,'模板变量(数组)'])
return $this->fetch();
return view();
return $this->display();
2.模板赋值
传递数据到模板输出有下面几种方式:
- assign 模板变量赋值
- fetch/display 方法传入参数
- view 助手函数
- share 公共模板变量赋值
$this->assign([
'list' => $list,
'count' => $count
]);
return $this->fetch('index', [
'name' => 'ThinkPHP',
'email' => 'thinkphp@qq.com'
]);
return $this->display($content, [
'name' => 'ThinkPHP',
'email' => 'thinkphp@qq.com'
]);
return view('index')->assign([
'name' => 'ThinkPHP',
'email' => 'thinkphp@qq.com'
]);
6、请求对象
Request
think\Request
think\facade\Request
不可一起使用
Request有四种调用方式
第一种方式:构造方法注入 :
$this->request->param();
第二种方式:操作方法注入
index(Rquest $request){$request->param()}
第三种方式:Facade调用
Request::param();
第四种方式:助手函数
request()->param();
1.构造方法注入,如果继承了基类控制器(Controller),则直接使用$this->request
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return $this->request->param('name');
}
}
2.在每个方法中使用依赖注入(操作方法注入)
<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
class Index extends Controller
{
public function index(Request $request)
{
return $request->param('name');
}
}
3.Facade调用
<?php
namespace app\index\controller;
use think\Controller;
use think\facade\Request;
class Index extends Controller
{
public function index()
{
return Request::param('name');
}
}
4.助手函数
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return request()->param('name');
}
}
请求类型
method、isGet、isPost、isPut、isDelete、isAjax、isPjax、isJson、isMobile、isHead、isPatch、isOptions、isCli、isCgi
if(request()->isPost()){
return ture;
}
获取数据
从控制器获取视图提交的数据有两种方式:Request对象、input助手
1.request()->param()
2.input()