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知识库 -> 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作 -> 正文阅读

[PHP知识库]技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作

技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作

技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作

1.URL访问

在多应用模式下,URL的访问地址定义如下:

http://serverName/index.php/应用/控制器/操作/参数/值...

在上篇文章我们使用url重写方法,将index.php隐藏,所以URL访问地址为:

http://serverName/应用/控制器/操作/参数/值...

根据上篇文章创建的admin端为例:
在这里插入图片描述
此时查看路由设置:
在这里插入图片描述
thinkphp框架给控制器和操作设置了默认值,这也是我们不输入控制器名和操作名就可以访问页面的原因:
在这里插入图片描述
最官方的访问方法应该是:

localhost:3000/admin/index/index

可能是自动查找index操作的原因,输入此段url会报错:
在这里插入图片描述
所以,输入到控制器就结束,控制器会自动查找默认操作名index:
在这里插入图片描述
如果我们想访问其他操作,可以定义操作名和操作方法:
在这里插入图片描述
此时,URL访问不输入操作名就会跳转到默认操作index,需要访问hello操作就要带上hello操作名:
在这里插入图片描述

2.路由与强制路由

(1)多应用模式下的路由定义:
以admin应用为例,创建route文件夹,内部新建文件app.php。
在这里插入图片描述
编写admin应用路由:
a.只要是php文件,必须有<?php ?>引用文本,后半段?>可不写。
b.thinkphp框架需要对每一个功能模块进行命名空间定义,这样才能通过命名空间使用控制器访问该模块下的方法。
c.使用路由模块需要通过命名空间引入路由模块的方法。
在这里插入图片描述
此时,使用路由方法定义路由:

// 自定义访问地址 	// 控制器/操作
Route::get('/', 'index/index');

在这里插入图片描述
此时,访问admin应用,自动跳转到该方法:
在这里插入图片描述
再定义hello方法:
在这里插入图片描述
在这里插入图片描述
(2)全局路由定义
thinkphp的一切功能的运行顺序都是从内到外:
在这里插入图片描述
在admin应用中定义的路由,url访问需要加admin:
localhost:3000/admin
而如果我们想要访问域名的同时直接跳转到web应用,就可以使用全局路由:
在这里插入图片描述
此时直接访问域名,失败:
在这里插入图片描述
在网上查询原因,开启多应用模式下,全局路由应该只可以返回数据,而不能解决url定向问题,解决方法应该在全局设置config/app.php修改默认应用名:
在这里插入图片描述
测试:
在这里插入图片描述
(3)强制路由
我比较喜欢使用thinkphp的强制路由方法。此方法可以提高网站的安全性。
修改路由配置:
在这里插入图片描述
此时,刷新页面,找不到该页面了:
在这里插入图片描述
强制路由的作用是,网站只能访问我们已经定义好的路由,没有定义的路由地址网站无法访问。
所以要想访问该地址,就必须在路由中写入该地址:
在这里插入图片描述
再次刷新页面就可以访问了:
在这里插入图片描述
同时,在admin应用为例,我们此时只可以通过localhost:3000/admin访问应用,如果携带控制器名和操作名同样无法进行访问:
在这里插入图片描述
在这里插入图片描述
也就是说,强制路由状态下,我们将其设置为如何显示,就只能通过这种方法进行显示。

3.模型

掌握路由之后,就可以通过路由进行数据接口的设置,但在此之前,我们需要学习数据模型。
每个数据模型代表一个数据表,通过数据模型上传数据到数据库的表中。
(1)创建模型
我们以admin为例,创建一个管理员模型Admin.php文件。
在这里插入图片描述
模型名会对应数据库中的数据表名,采用首字母大写的驼峰命名法。如果模型名为AdminModel,则对应的数据表名就应该为admin_model。
此时我们定义的模型名为Admin,那么数据库中的数据表就应该为admin。
(2)连接数据库并新建数据表
打开navicat,新建一个数据库。
在这里插入图片描述
连接测试:
在这里插入图片描述
在连接中右键新建数据库:
在这里插入图片描述
确定,双击mine-php数据库,新建表,根据模型名,定义表名为admin。
在这里插入图片描述
ctrl+s保存输入表名admin,确定:
在这里插入图片描述
在这里插入图片描述
回到Admin.php模型,设置字段内容:

<?php
namespace app\admin\model;

use think\Model;

class Admin extends Model{
    // 设置字段信息
    protected $schema = [
        'id'          => 'int',
        'username'    => 'string',
        'password'    => 'string',
    ];
}

在这里插入图片描述

4.数据库操作模型

(1)新增数据
在admin应用中编写新增数据方法add():

    public function add()
    {
        $admin = new Admin;
        
        $admin->save([
            'username' => 'admin',
            'password' => '123456'
        ]);

        return '新增数据成功';
    }

在这里插入图片描述
定义新增数据路由:
在这里插入图片描述
页面输入接口连接测试:
在这里插入图片描述
刷新查看数据库表:
在这里插入图片描述
插入成功。
为之后操作测试做铺垫,再插入两条数据:
在这里插入图片描述
(2)查找数据

  • 查找全部数据
public function find_all()
{
    $admins = Admin::select();
    dump($admins->toArray());
}

在这里插入图片描述
添加路由:
在这里插入图片描述
网页测试:
在这里插入图片描述
也可以通过查询构造器方法进行查询:

public function findAll()
{
    $admins = Admin::select();
    dump($admins->toArray());

    dump('______分界线______');

    $list = Admin::where('password', '123456')->limit(2)->order('id', 'asc')->select();
    foreach($list as $key=>$admin){
        echo $admin->name;
    }
}

在这里插入图片描述
网页测试:
在这里插入图片描述

  • 查找单条数据
public function find()
{
    $admins = Admin::find(2);
    dump($admins->toArray());
}

啊啊啊
添加路由:
在这里插入图片描述
网页测试:
在这里插入图片描述
也可以通过使用查询构造器查询满足条件的数据:

public function find()
{
    $admins = Admin::where('username', '八方设计')->find();
    dump($admins->toArray());
}

在这里插入图片描述
(3)更新数据
更新数据的过程就是先查找再更新。
也就是上面两种方法的合并:

public function update()
{
    // 查找单条数据
    $admin = Admin::where('username', '最强的森')->find();
    // 定义修改值并保存
    $admin -> password = "666666";
    $admin -> save();
}

添加路由:
在这里插入图片描述
网页测试,本次没有return返回结果,但没有报错就是成功了:
在这里插入图片描述
刷新navicat查看:
在这里插入图片描述
以上方法算是查询构造器方法。
修改方法也可以使用静态方法直接查找字段进行更新:

// 静态方法直接更新
$admin = Admin::update(['password' => '111111'], ['username' => '八方设计']);
return '修改数据成功';

在这里插入图片描述
可以进行批量更新数据,大家自行测试:

$admin= new User;
$data= [
	// 修改id为1的字段
    ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],
	// 修改id为2的字段
    ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com']
];
$admin->saveAll($data);

(4)删除数据
删除方法也比较灵活:
a.先查找再删除:

$admin = Admin::find(1);
$admin->delete();

b.根据主键删除:

Admin::destroy(1);
// 支持批量删除多个数据
Admin::destroy([1,2,3]);

c.条件删除:

Admin::destroy(function($query){
    $query->where('id','>',10);
});
// 或
Admin::where('id','>',10)->delete();

我就不一个一个测试了,中和三类方法制作一个构造器查询在删除:

public function delete()
{
    // 查找
    $admin = Admin::where('username', 'admin')->find();
    $admin->delete();

    return '删除数据成功';
}

在这里插入图片描述
navicat刷新查看:
在这里插入图片描述
到此路由、模型与数据库的操作到此学习完。

下篇文章我们实现CRUD接口优化,并与前端交互完成数据的操作。

更多设计、功能的学习经验,大家也可以去我的公众号查看!

————
在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:23:16  更:2021-08-06 09:23:57 
 
开发: 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年5日历 -2024/5/4 20:11:11-

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