#### 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作
> 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境
> 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目
> 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作
> 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-4.跨域且传输数据,并优化后端接口
> 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录(一),密码的bcrypt(hash)加密与验证
> 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-6.用户登录(二),token验证
> 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-7.分类的模型关联和通用CRUD接口
> 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-8.使用mavoneditor(vue的markdown编辑器),并批量上传图片
###### 1.URL访问
在多应用模式下,URL的访问地址定义如下:
~~~
http://serverName/index.php/应用/控制器/操作/参数/值...
~~~
在上篇文章我们使用url重写方法,将index.php隐藏,所以URL访问地址为:
~~~
http://serverName/应用/控制器/操作/参数/值...
~~~
根据上篇文章创建的admin端为例:
![](https://img.kancloud.cn/95/6c/956cfbc40bb9f8066f4eab21a356be88_742x486.png)
此时查看路由设置:
![](https://img.kancloud.cn/c3/69/c369d636c1a28b935919bef09da9d9f9_753x1007.png)
thinkphp框架给控制器和操作设置了默认值,这也是我们不输入控制器名和操作名就可以访问页面的原因:
![](https://img.kancloud.cn/e9/e6/e9e69c9ddc829e718bbed50b0b3d73c9_356x149.png)
最官方的访问方法应该是:
~~~
localhost:3000/admin/index/index
~~~
可能是自动查找index操作的原因,输入此段url会报错:
![](https://img.kancloud.cn/cb/44/cb44eb51813fab97260658f3bd9e54b1_616x222.png)
所以,输入到控制器就结束,控制器会自动查找默认操作名index:
![](https://img.kancloud.cn/2a/75/2a75523f0ea9f811b594798185a405b5_377x123.png)
如果我们想访问其他操作,可以定义操作名和操作方法:
![](https://img.kancloud.cn/8a/8e/8a8e01d966951ebf826fcbf681ca97fc_637x380.png)
此时,URL访问不输入操作名就会跳转到默认操作index,需要访问hello操作就要带上hello操作名:
![](https://img.kancloud.cn/1f/71/1f7163ef3c03ef058ba0ca93d9792716_409x126.png)
###### 2.路由与强制路由
(1)多应用模式下的路由定义:
以admin应用为例,创建route文件夹,内部新建文件app.php。
![](https://img.kancloud.cn/0d/af/0daf337f4b8e040e692a93dd5667c077_189x255.png)
编写admin应用路由:
a.只要是php文件,必须有`<?php ?>`引用文本,后半段`?>`可不写。
b.thinkphp框架需要对每一个功能模块进行命名空间定义,这样才能通过命名空间使用控制器访问该模块下的方法。
c.使用路由模块需要通过命名空间引入路由模块的方法。
![](https://img.kancloud.cn/a3/5f/a35f3be1969ab16880789e08d66b4d10_422x143.png)
此时,使用路由方法定义路由:
~~~
// 自定义访问地址 // 控制器/操作
Route::get('/', 'index/index');
~~~
![](https://img.kancloud.cn/78/61/78619a5f2c5a7da840c4a778ccef2e4f_346x179.png)
此时,访问admin应用,自动跳转到该方法:
![](https://img.kancloud.cn/73/99/7399ba0c7d56ca3f4754ad6cf7159731_390x133.png)
再定义hello方法:
![](https://img.kancloud.cn/bf/ab/bfab94a6759b7d7af4fb3e34c402a2dc_474x188.png)
![](https://img.kancloud.cn/fc/98/fc9859d13f8f5414e006db4416234014_384x121.png)
(2)全局路由定义
thinkphp的一切功能的运行顺序都是从内到外:
![](https://img.kancloud.cn/25/1e/251e633c11c6f8943a8fbd0b1c26c3fb_343x888.png)
在admin应用中定义的路由,url访问需要加admin:
localhost:3000/admin
而如果我们想要访问域名的同时直接跳转到web应用,就可以使用全局路由:
![](https://img.kancloud.cn/5a/0f/5a0f631460202007b8d338504fd1b9ba_621x486.png)
此时直接访问域名,失败:
![](https://img.kancloud.cn/69/14/691498ab192983c9a7d276b631e21ebb_597x190.png)
在网上查询原因,开启多应用模式下,全局路由应该只可以返回数据,而不能解决url定向问题,解决方法应该在全局设置config/app.php修改默认应用名:
![](https://img.kancloud.cn/ed/a7/eda7f1aa7a1c236ccd8cc2ab0f2d5645_1459x1073.png)
测试:
![](https://img.kancloud.cn/f8/03/f8038456b5d92a6847f61466a0d7c197_373x134.png)
(3)强制路由
我比较喜欢使用thinkphp的强制路由方法。此方法可以提高网站的安全性。
修改路由配置:
![](https://img.kancloud.cn/25/98/259871095d2617c3701713422c62ad90_1459x1073.png)
此时,刷新页面,找不到该页面了:
![](https://img.kancloud.cn/52/5f/525f67b7e0cd38d184bf1768c195a302_661x216.png)
强制路由的作用是,网站只能访问我们已经定义好的路由,没有定义的路由地址网站无法访问。
所以要想访问该地址,就必须在路由中写入该地址:
![](https://img.kancloud.cn/05/1b/051ba00acfa52ef7a89010994ef6fbea_731x393.png)
再次刷新页面就可以访问了:
![](https://img.kancloud.cn/a1/8b/a18b616ab81058f6fe1ed756dd99827e_294x121.png)
同时,在admin应用为例,我们此时只可以通过localhost:3000/admin访问应用,如果携带控制器名和操作名同样无法进行访问:
![](https://img.kancloud.cn/2a/bb/2abb0b9f869383892110760f3073e4f3_368x219.png)
![](https://img.kancloud.cn/35/0c/350c9964c75d326e79204e934d586f2b_620x229.png)
也就是说,强制路由状态下,我们将其设置为如何显示,就只能通过这种方法进行显示。
###### 3.模型
掌握路由之后,就可以通过路由进行数据接口的设置,但在此之前,我们需要学习数据模型。
每个数据模型代表一个数据表,通过数据模型上传数据到数据库的表中。
(1)创建模型
我们以admin为例,创建一个管理员模型Admin.php文件。
![](https://img.kancloud.cn/96/57/96579d8c2d248070d23c62ac79844b6e_685x427.png)
模型名会对应数据库中的数据表名,采用首字母大写的驼峰命名法。如果模型名为AdminModel,则对应的数据表名就应该为admin\_model。
此时我们定义的模型名为Admin,那么数据库中的数据表就应该为admin。
(2)连接数据库并新建数据表
打开navicat,新建一个数据库。
![](https://img.kancloud.cn/17/c2/17c295f87ad3cd3d9c5904c2bbee2002_486x549.png)
连接测试:
![](https://img.kancloud.cn/ff/4e/ff4ea552cd3862d269253252f1c3a2ae_486x549.png)
在连接中右键新建数据库:
![](https://img.kancloud.cn/61/ff/61ffa3e82c2c7f2ac5368fc18097c124_456x399.png)
确定,双击mine-php数据库,新建表,根据模型名,定义表名为admin。
![](https://img.kancloud.cn/d1/1c/d11cfaecb8d2d1e2d9b29b4ba9eb8a2c_761x528.png)
ctrl+s保存输入表名admin,确定:
![](https://img.kancloud.cn/09/b8/09b819280ba731edd68f330d078e3b6c_980x669.png)
![](https://img.kancloud.cn/c9/e8/c9e85a6f6404d20fb126fd02c5ce855b_537x238.png)
回到Admin.php模型,设置字段内容:
~~~
<?php
namespace app\admin\model;
use think\Model;
class Admin extends Model{ // 设置字段信息 protected $schema = [
'id' => 'int',
'username' => 'string',
'password' => 'string',
];}
~~~
![](https://img.kancloud.cn/81/9c/819c9c1430bd183c088ca50ba85e5605_533x330.png)
###### 4.数据库操作模型
(1)新增数据
在admin应用中编写新增数据方法add():
~~~
public function add()
{
$admin = new Admin;
$admin->save([
'username' => 'admin',
'password' => '123456'
]);
return '新增数据成功';
}
~~~
![](https://img.kancloud.cn/f9/21/f9219c7007c8558fcfff8b1957b12755_701x589.png)
定义新增数据路由:
![](https://img.kancloud.cn/3f/38/3f380b5fd53f8253232df825fb511f56_443x218.png)
页面输入接口连接测试:
![](https://img.kancloud.cn/d3/90/d39050167cee0515b623478da493ccb3_406x120.png)
刷新查看数据库表:
![](https://img.kancloud.cn/60/6f/606f1df1ada431d2a31b07c75239b9d3_459x112.png)
插入成功。
为之后操作测试做铺垫,再插入两条数据:
![](https://img.kancloud.cn/57/13/571366c12cf945e0178693444d821fb8_304x193.png)
(2)查找数据
* 查找全部数据
~~~
public function find_all()
{
$admins = Admin::select();
dump($admins->toArray());
}
~~~
![](https://img.kancloud.cn/c3/41/c34190d754e3674c88b24e837a294afa_594x600.png)
添加路由:
![](https://img.kancloud.cn/f6/19/f619c6cfc34628a9efa234261a1c1cf5_542x230.png)
网页测试:
![](https://img.kancloud.cn/f0/c4/f0c4bb89e57fe55a315746ff5e472f32_470x407.png)
也可以通过查询构造器方法进行查询:
~~~
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;
}
}
~~~
![](https://img.kancloud.cn/a6/28/a628e714578807106d17e427fe0334b5_1370x623.png)
网页测试:
![](https://img.kancloud.cn/fb/14/fb1404258ff3cca573d9dea8859c70f2_415x552.png)
* 查找单条数据
~~~
public function find()
{
$admins = Admin::find(2);
dump($admins->toArray());
}
~~~
![](https://img.kancloud.cn/60/20/60201ef89553ebd180172055223bdfe3_517x765.png)
添加路由:
![](https://img.kancloud.cn/d2/fa/d2fafc830d9b31b7e0f884af86362e6e_497x267.png)
网页测试:
![](https://img.kancloud.cn/d2/8b/d28b6e55dd39365b4f627bd38bc897d8_374x184.png)
也可以通过使用查询构造器查询满足条件的数据:
~~~
public function find()
{
$admins = Admin::where('username', '八方设计')->find();
dump($admins->toArray());
}
~~~
![](https://img.kancloud.cn/05/ba/05bac5b464b118e4c10cbc50376f1eec_459x166.png)
(3)更新数据
更新数据的过程就是先查找再更新。
也就是上面两种方法的合并:
~~~
public function update()
{
// 查找单条数据
$admin = Admin::where('username', '最强的森')->find();
// 定义修改值并保存
$admin -> password = "666666";
$admin -> save();
}
~~~
添加路由:
![](https://img.kancloud.cn/ea/c9/eac9fb18286d5bbbb16b355050663f40_488x271.png)
网页测试,本次没有return返回结果,但没有报错就是成功了:
![](https://img.kancloud.cn/b3/50/b350cf79b1ed7208ab3ef4611bda4023_415x142.png)
刷新navicat查看:
![](https://img.kancloud.cn/95/03/950323c35634df837c5ab36b8ef494f1_427x189.png)
以上方法算是查询构造器方法。
修改方法也可以使用静态方法直接查找字段进行更新:
~~~
// 静态方法直接更新
$admin = Admin::update(['password' => '111111'], ['username' => '八方设计']);
return '修改数据成功';
~~~
![](https://img.kancloud.cn/f4/b7/f4b7052543b4609887943f649efff7c1_814x268.png)
可以进行批量更新数据,大家自行测试:
~~~
$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 '删除数据成功';
}
~~~
![](https://img.kancloud.cn/88/f8/88f8b6bf4bda2e4ae947a1e95bad48db_424x137.png)
navicat刷新查看:
![](https://img.kancloud.cn/26/22/26227cb51b1f0fef798928e161dd03f4_345x157.png)
到此路由、模型与数据库的操作到此学习完。
- tp6+vue
- 1.工具和本地环境
- 2.启动项目
- 3.路由、模型与数据库操作
- 4.优化后端接口,前端使用axios实现接口功能
- 5.用户登录,bcrypt(hash)加密与验证
- 6.用户登录(二),token验证
- 7.分类的模型关联和通用CRUD接口
- 8.使用vue的markdown编辑器并批量上传图片
- Node.js + Vue.js
- 工具,本地环境
- 2.1启动项目
- 3.element-ui和vue-router路由的安装和使用
- 4.使用axios,并创建接口上传数据到mongodb数据库
- 5.mongoodb数据库的“删、改、查”操作
- 6.mongodb数据库无限层级的数据关联(子分类)
- 7.使用mongodb数据库关联多个分类(关联多个数据)
- 8.server端使用通用CRUD接口
- 9.图片上传
- 10.vue的富文本编辑器(vue2-editor)
- 11.动态添加分栏上传多组数据
- 12-1.管理员模块
- 13-1.搭建前台web端页面
- 1.使用sass工具搭建前台web端页面
- 2.sass工具的变量
- 3.使用flex布局并开始搭建web端
- 4.vue广告轮播图,并使用接口引入数据
- 5.使用字体图标(iconfont)
- 6.卡片组件的封装
- 14-1.生产环境编译
- 1.环境编译
- 2.购买域名服务器并解析域名到服务器
- 3.nginx配置web服务器并安装网站环境
- 4.git拉取代码到服务器
- 5.配置Nginx反向代理
- 6.迁移本地数据到服务器(mongodump)
- uni
- 1.工具&本地环境
- 2.页面制作
- 3.页面制作、组件与轮播
- 4.页面跳转与横向滑动
- 5.用户授权登录和用户信息获取
- 6.用户注册和数据存储
- 7.用户填写表单信息