-

ThinkPHP使用介绍(图文教程)

ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架。

ThinkPHP安装
使用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

IIS配置ThinkPHP
物理路径 选择 ThinkPHP的public目录

打开网址,看到的效果,或输入 : http://a1/index.php/index/index/index 带参数 如:http://a1/index.php/index/index/hello?name=xiyueta

web.config文件

<?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开发模式
MVC是一种常用的软件架构模式,它将应用程序分为三个主要部分:模型、视图和控制器。

模型(Model)表示应用程序的数据和业务逻辑。在MVC架构中,模型通常定义了如何访问和操作数据,包括如何验证数据和处理数据之间的关系。

视图(View)表示用户交互界面。在MVC中,视图通常是指HTML、CSS和JavaScript,用于构建Web应用程序的用户界面。

控制器(Controller)负责协调模型和视图之间的通信。控制器处理来自用户的请求,操作数据模型,然后将更改反映到视图中。

ThinkPHP使用
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使用
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操作
ThinkPHP8.0操作

设置模板后缀为*.php类型,用原生php引擎

ThinkPHP8 验证码安装
验证码安装和使用: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;">
        
ThinkPHP8.0多应用
TP8多应用配置与路由定义
网站根目录 >> cmd >> composer require topthink/think-multi-app

TP8多应用配置与路由定义,view模板目录

ThinkPHP8.0使用模板引擎
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帮助
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都有这个方法  

mobiledetect手机端检测
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 设备  
}