#### 技能學習:學習使用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端為例:

此時查看路由設置:

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刷新查看:

到此路由、模型與數據庫的操作到此學習完。
- 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.用戶填寫表單信息