thinkphp项目思路

st779779 / 2024-01-09 / 原文

官方手册 https://doc.thinkphp.cn/v8_0/setup.html

安装配置

安装

composer create-project topthink/think tp

更新

composer update topthink/framework

运行

php think run
php think run -p 80

配置小皮面板

Alt text
Alt text

注意事项

  1. 配置文件路径到 public
  2. php版本要注意当前的框架支持的版本
  3. 同步host有的时候会失败 比如启动了360 就会失败 需要手动打开对文件修改
  4. 配置伪静态 url重写 https://doc.thinkphp.cn/v8_0/url_access.html

[ Apache ]
httpd.conf配置文件中加载了mod_rewrite.so模块
AllowOverride None 将None改为 All
把下面的内容保存为.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>

host文件目录 C:\Windows\System32\drivers\etc
设置域名 http://www.tpbase.cnn/

通过 http://www.tpbase.cnn/index.php/think 来访问路由

验证码扩展

composer require topthink/think-captcha
修改配置文件
config/captcha.php

//验证码字符大小
'fontSize' => 15,
// 验证码图片高度
'imageH'   => 40,
// 验证码图片宽度
'imageW'   => 150,

需要开启session
app/controller/middleware.php 文件

<?php
// 全局中间件定义文件
return [

    // Session初始化
    \think\middleware\SessionInit::class
];

视图扩展 安装

composer require topthink/think-view

开启 调试模式

根目录 env文件 APP_DEBUG = true
config/app.php 配置 'show_error_msg' => true

开启强制路由

config/route.php 配置
'url_route_must' => true,

各种小功能实现

登录

视图文件路径view/login/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录页面</title>
</head>
<body>
    <form action="{:url('login')}" method="post">
        用户名: <input type="text" name="username"> <br>
        密码: <input type="password" name="password"> <br>
        <img src="{:captcha_src()}" onclick="this.src='{:captcha_src()}?_='+ Date.now()" alt=""><br>
        验证码<input type="text" name="captcha"> <br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

路由文件路径route/app.php

use think\facade\Route;
Route::rule('login','index/login','get|post');

控制器文件路径app/controller/Index.php

 public function login()
    {
        // return '12';
        if ($this->request->isGet()) {
            // 如果是get请求,返回登录页面
            return view('login/index');
        } else if ($this->request->isPost()) {
            // 如果是post请求,进行登录处理
            // 获取表单提交的数据
            $data = $this->request->post();
            // 对数据进行校验
            $this->validate($data, [
                //校验规则
                'username' => 'require',
                'password' => 'require',
                'captcha|验证码'=>'require|captcha'
            ], [
                //校验校验失败返回
                'username.require' => '用户名不能为空',
                'password.require' => '密码不能为空',
                'captcha.require'=>'验证码不能为空',
            ]);
            //通过校验
            //对账号和密码进行验证
            //查找数据库中是否有改账号 并且密码是否正确
            // 设置一个密码的盐
            $salt = 'aidfhy48y289y523;``o2b';
            // 对处理密码
            $password = md5(md5($data['password']) . $salt);
            $where=[
                'username'=> $data['username'],
                'password'=> $password
            ];
            //到数据库中进行查询判断是否能查到数据
            // $res = model('')->login($where);
            //如果查到数据 登录成功 否则失败
            $res= rand(1,10) %2 ? true : false ;
            // $res= rand(1,10) %2 ?? false ;

            //处理信息 对 信息进行入库处理 获取跳转到对应的页面
            if($res){
                return "<script>alert('登录成功')</script>";
                // return json(['code'=> 1,'msg'=> '登录成功']);
            }else{
                return "<script>alert('登录成功')</script>";
                // return json(['code'=> 10001,'msg'=> '登录失败']);
            }
        }
    }

总结

  1. 验证码功能,要 手动安装 并配置开启session ,视图功能也要安装
  2. 验证码获取当然还有其他获取方式看手册 <img src="{:captcha_src()}" onclick="this.src='{:captcha_src()}?_='+ Date.now()" alt="">
    • 点击的时候设置对自身操作设置一个随机的参数放置浏览器因为缓存功能不进行请求
  3. 用到了路由,跟校验
  4. 一般的数据请求
    • 获取请求数据 $this->response()->post()
    • 对数据进行校验 $this->validate()
    • 处理数据 入库处理或者其他
    • 返回数据 json数据或者 视图模板
  5. 要注意请求的数据name名称 跟校验的 名称是否一致
  6. tp框架初始化默认的是路由模式是混合模式
    • 可以通过路由注册后的路由地址进行访问
    • 也可以不注册路由地址直接访问
    • 可以设置为强制模式 只能通过自定义的规则进行访问

jwt认证 框架无关

JWT 是一种无状态的身份验证机制,所有必要的信息都编码在 token 中 数据进行加密放在token中
session 是一种有状态的机制,需要在服务器端保存用户会话状态。
封装JWT工具类 (参考https://github.com/lcobucci/jwt/tree/5.3.x)

安装 composer require lcobucci/jwt