ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架。
使用composer安装ThinkPHP5.1
cmd里输入 >> 如果你是第一次安装的话,在命令行下面,切换到你的WEB根目录下面并执行下面的命令: composer create-project topthink/think=5.1.* tp5
ThinkPHP5.1完全开发手册 https://www.kancloud.cn/manual/thinkphp5_1/353946
thinkphp8.0安装
第一步:tp8安装 cmd >> composer create-project topthink/think tp 教程https://doc.thinkphp.cn/v8_0/setup.html
第二步:命令进行更新: composer update topthink/framework
composer create-project topthink/think tp
物理路径 选择 ThinkPHP的public目录
打开网址,看到的效果,或输入 : http://a1/index.php/index/index/index
带参数 如:http://a1/index.php/index/index/hello?name=xiyueta
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Rewrite to index.php">
<match url="^(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
MVC是一种常用的软件架构模式,它将应用程序分为三个主要部分:模型、视图和控制器。
模型(Model)表示应用程序的数据和业务逻辑。在MVC架构中,模型通常定义了如何访问和操作数据,包括如何验证数据和处理数据之间的关系。
视图(View)表示用户交互界面。在MVC中,视图通常是指HTML、CSS和JavaScript,用于构建Web应用程序的用户界面。
控制器(Controller)负责协调模型和视图之间的通信。控制器处理来自用户的请求,操作数据模型,然后将更改反映到视图中。
ThinkPHP使用
application >> index >> controller >> index.asp 里添加 test动作
application >> index >> view >> index >> test.html 里添加 内容
输入网址:http://a1/index.php/index/index/test 看到效果
如果使用这种 return $this->fetch('test'); 需要继承
带参数模板引擎 $this->assign('age',18);
return $this->fetch('test',['name'=>'小明']); 需要继承
开启错误提示:app_debug 改为 true
ThinkPHP数据库操作
http://a1/index.php/index/index/sel
使用数据库表前缀,使用时Db::table('xy_student') 或 Db::name('student')
测试案例代码
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller
{
public function index()
{
$c="<a href='/index.php/index/index/find' target='_blank'>单条查询(find)</a>";
$c.="<br><a href='/index.php/index/index/select' target='_blank'>多条查询(select)</a>";
$c.="<br><a href='/index.php/index/index/findvalue' target='_blank'>查询某个字段的值(find)</a>";
$c.="<br><a href='/index.php/index/index/insert' target='_blank'>添加数据(insert)</a>";
$c.="<br><a href='/index.php/index/index/insertAll' target='_blank'>添加多条数据(insertAll)</a>";
$c.="<br><a href='/index.php/index/index/update' target='_blank'>更新数据(update)</a>";
$c.="<br><a href='/index.php/index/index/delete' target='_blank'>删除数据(delete)</a>";
return $c;
}
//查询单个数据使用find方法:
public function find()
{
// table方法必须指定完整的数据表名
$list=Db::name('student')->where('id',1)->find();
//如果查找不到则返回 null findOrFail(); 为没有找到数据后抛出异常可以使用
return json($list);
}
//查询多个数据(数据集)使用select方法:
public function select()
{
// table方法必须指定完整的数据表名
$list=Db::table('xy_student')->select();
return json($list);
}
//查询某个字段的值
public function findvalue()
{
// 返回某个字段的值
$name=Db::table('xy_student')->where('id',1)->value('name');
return $name;
}
//insert 方法向数据库提交数据
public function insert()
{
$data = ['name' => '小孙', 'sex' => '1', 'classes' => '大学', 'age' => '18'];
$s=Db::name('student')->insert($data);
return $s;
}
//insertAll 添加多条数据
public function insertAll()
{
$data =[
['name' => '小孙', 'sex' => '1', 'classes' => '大学', 'age' => '18'],
['name' => '小孙2', 'sex' => '1', 'classes' => '大学', 'age' => '18']
];
$s=Db::name('student')->insertAll($data);
return $s;
}
//update 更新数据
public function update()
{
$s=Db::name('student')->where('id', 1)->update(['name' => '小明明']);
return $s;
}
//delete 删除数据
public function delete()
{
$s=Db::table('xy_student')->delete(1);
return $s;
}
}
ThinkPHP8.0操作
设置模板后缀为*.php类型,用原生php引擎
验证码安装和使用:cmd >> composer require topthink/think-captcha
//配置 config >> middleware.php 开启 angPack::class
TP8多应用配置与路由定义,view模板目录
<img id="captchaPic" src="<?php echo captcha_src()?>" onclick="src='/captcha.html?'+Math.random();" style="cursor: pointer;">
TP8多应用配置与路由定义
网站根目录 >> cmd >> composer require topthink/think-multi-app
TP8多应用配置与路由定义,view模板目录
use think\facade\View; 模板引擎
TP8模板引擎
<?php
namespace app\controller;
use app\BaseController;
use think\facade\View;
class Index extends BaseController{
public function index(){
// View::assign("name","你好呀");
$arr=array(
"name"=>"小孙",
"age"=>"18",
"qq"=>"313801120"
);
View::assign($arr);
return View::fetch();
}
}
模板里使用if和foreach循环
php控制器文件内容
<?php
namespace app\index\controller;
use app\BaseController;
use think\facade\Config;
use think\facade\Env;
use think\facade\Filesystem;
use think\exception\ValidateException;
use think\facade\Validate;
use think\Image;
use think\facade\Db;
use think\facade\View;
class Index extends BaseController
{
public function index()
{
$rs = Db::name('website')->find(1);
$userList = array(
array('name' => '小明', 'age' => '18'),
array('name' => '小张', 'age' => '24'),
array('name' => '小草', 'age' => '20')
);
View::assign(array(
"rs"=>$rs,
"userList"=>$userList,
));
return View::fetch("/index");
}
}
view文件内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{$rs['webtitle']|default=''}}</title>
<meta name="keywords" content="{{$rs['webkeywords']|default=''}}">
<meta name="description" content="{{$rs['webdescription']|default=''}}">
</head>
<body>
<{if $rs['qq'] =='123456' }>
=123456
<{elseif $rs['qq'] =='313801120' }>
=313801120
<{else}>
其它
<{/if}>
<div>
</div>
<ul>
<{foreach $userList as $user}>
<li>昵称: {{$user['name']}} - 年龄: {{$user['age']}}</li>
<{/foreach}>
</ul>
</body>
</html>
ThinkPHP使用技巧与注意
{{$rs['level']|default=''|raw}} 里|raw显示不转义的html内容
$rs = Db::name('website')->find(1); 需要加1,要不然找不到数据
$admin = Db::name('admin')->where('id', $adminid)->find(); 不能加1,要不然也找不到数据,奇怪了
where多个搜索为一组方法:
$whereOr = [
['item', 'LIKE', '%' . $key . '%'],
['adminname', 'LIKE', '%' . $key . '%'],
];
// 第一步:获取SQL语句(不执行查询)
$query = Db::name('systemlog')
->order('id', 'desc')
->where($where)
->where(function($query) use ($whereOr){
$query->whereOr($whereOr);
})
->buildSql(); // 注意:不是所有版本的ThinkPHP都有这个方法
// 打印SQL语句
die($query);
( SELECT * FROM `xy_systemlog` WHERE `createtime` >= '2024-06-22 00:00:00' AND `createtime` <= '2024-06-05 23:59:59' AND ( `item` LIKE '%login%' OR `adminname` LIKE '%login%' ) ORDER BY `id` DESC )
where多个为一组方法:
$ip=request()->ip();
// ,错误登录 2次,达到最大登录 5次则不可登录
$today = date('Y-m-d'); // 获取当前日期,格式为 YYYY-MM-DD
$whereOr = [
['msgstr','=', '密码错误!'],
['msgstr','=', '帐号不存在!'],
];
$ipLoginErrTotal = Db::name('systemlog')
->where('ip', $ip)
->whereRaw("DATE(createtime) = ?", [$today]) // 使用 whereRaw 来构建自定义的 WHERE 条件
->where(function($query) use ($whereOr){
$query->whereOr($whereOr);
})
->count();
// ->buildSql(); // 注意:不是所有版本的ThinkPHP都有这个方法
Mobile Detect是一个基于User-Agent的PHP类库,主要用于识别移动设备信息,包括手机、平板电脑以及其他可穿戴设备等。使用
验证码安装和使用:cmd >> composer require topthink/think-captcha
require_once 'path/to/Mobile_Detect.php';
$detect = new Mobile_Detect;
if( $detect->isMobile() ){
// 是手机端
}
if( $detect->isTablet()){
// 是平板
}
if( $detect->is('iPhone') || $detect->is('iPad') ){
// 是 iOS 设备
}