摘要:一路由目錄眾所周知,對(duì)于我們熟知的任何一款框架,例如路由系統(tǒng)都是極其重要的存在。文件用于定義界面的路由。定義在中的路由都是無(wú)狀態(tài)的,并且被分配了中間件組。生成的控制器為每個(gè)行為保留了方法,同時(shí)還包括了處理動(dòng)作和的聲明注釋。
一、路由目錄
眾所周知,對(duì)于我們熟知的任何一款PHP框架,例如TP、CI、YII、路由系統(tǒng)都是極其重要的存在。 對(duì)于laravel框架也一樣,對(duì)于數(shù)據(jù)庫(kù)的操作,無(wú)非就是增刪改查,只不過(guò)框架不同,語(yǔ)法不同, 所以掌握l(shuí)aravel框架的路由系統(tǒng)對(duì)于我們掌握該框架有著至關(guān)重要的作用。 我們知道對(duì)于LARAVEL框架以前的版本,路由都是寫在app里的,現(xiàn)在的laravel框架路由存在在Routes目錄下,如下圖所示:
所有的 Laravel 路由都在 routes 目錄中的路由文件中定義,這些文件都由框架自動(dòng)加載。 routes/web.php 文件用于定義 web 界面的路由。 這里面的路由都會(huì)被分配給 web 中間件組,它提供了會(huì)話狀態(tài)和 CSRF 保護(hù)等功能。 定義在 routes/api.php 中的路由都是無(wú)狀態(tài)的,并且被分配了 api 中間件組。 我們先來(lái)熟悉一下HTTP訪問(wèn)的幾種方法: 1. Get方法:常用的方法,略; 2. Post方法:常用的方法,略; 3. Head方法:與get方法類似,主要是為了獲取某個(gè)訪問(wèn)的頭部信息, 服務(wù)器不返回請(qǐng)求內(nèi)容; 4. PUT方法:請(qǐng)求往服務(wù)器上存文件; 5. DELETE方法:請(qǐng)求刪除服務(wù)器上的文件; 6. TRACE方法:就是獲取服務(wù)器收到的來(lái)自客戶端的請(qǐng)求信息(收發(fā)調(diào)試), 一般用于調(diào)試服務(wù)器; 7. Connect方法:把服務(wù)器作為跳板,讓服務(wù)器代替用戶去訪問(wèn)其它網(wǎng)頁(yè), 之后把數(shù)據(jù)原原本本的返回給用戶; 8. Options方法:獲取服務(wù)器URI所支持的方法,或用于檢查服務(wù)器的性能, ajax進(jìn)行跨域訪問(wèn)時(shí),先發(fā)送options方法來(lái)判斷請(qǐng)求是否安全。
二、熟悉路由
我們先寫幾個(gè)簡(jiǎn)單的路由來(lái)認(rèn)識(shí)一下Laravel下的路由路徑。 在開始練習(xí)之前,我們先關(guān)閉routes/web.php 下的下面兩行auth相關(guān)代碼,避免影響練習(xí)測(cè)試。 //Auth::routes(); //Route::get("/home", "HomeController@index")->name("home");
此刻我們?cè)L問(wèn)127.0.01:9999/news時(shí),顯示的應(yīng)該是NEWS字樣。 接下來(lái)我們來(lái)給數(shù)據(jù)表中填充十組數(shù)據(jù),然后建立Model類以及控制器,通過(guò)路由來(lái)訪問(wèn)這些數(shù)據(jù)。(這里就不通過(guò)laravel自帶的 seed 填充了,有興趣的朋友可以自行查詢?cè)趺刺畛淠M數(shù)據(jù).關(guān)鍵字"laravel seeder")。表結(jié)構(gòu)如下圖所示
使用artisan命令建立Model類,打開cmd 切換到項(xiàng)目根目錄,輸入php artisan make:model News 得到如下圖所示
打開app/News.php 文件,由于laravel默認(rèn)Model類對(duì)應(yīng)的表名為類名加s,既對(duì)應(yīng)的表應(yīng)該是newss,我們?cè)谖募屑尤雙rotected $table = "News",指定該model類對(duì)應(yīng)表news。 我們?cè)偈褂胊rtisan建立控制器. php artisan make:controller IndexController 成功之后,打開app/Http/Controllers/IndexController.php ,測(cè)試成功。
加入路由
測(cè)試成功
至此說(shuō)明我們已經(jīng)可以通過(guò)路由訪問(wèn)通控制器, 接下來(lái)我們來(lái)使用Eloquent ORM 來(lái)調(diào)取數(shù)據(jù)庫(kù)數(shù)據(jù)。
如上圖,需要在文件頭部引入對(duì)應(yīng)Model類
use AppNews ,然后 在方法Index里調(diào)用News::all() Eloquent方法,然后展示出數(shù)組模式,toArray();
除此之外,我們還可以使用DB類的靜態(tài)方法來(lái)和數(shù)據(jù)庫(kù)進(jìn)行交互。 toArray()); $news = DB::table("news")->get(); var_dump($news); } }
以上只是數(shù)據(jù)庫(kù)最簡(jiǎn)單的展示方法,具體的增刪改查我們會(huì)在下節(jié)教程繼續(xù)學(xué)習(xí),現(xiàn)在我們?cè)倩剡^(guò)頭來(lái),看看路由的幾種規(guī)則。
1、路由的match、any方法
/*
match方法是laravel自己封裝好的,同樣它的意思是匹配
*/
Route::match(["get,post],"admin/login",function(){ return "login"; });
/*
在這里呢我們可以用match這個(gè)方法去匹配兩種請(qǐng)求方式,這樣是不是減少了代碼量呢
*/
我們還有第二種方法,
/*
GET,POST,PUT,DELETE.. 任何方法訪問(wèn) www.itbool.com/Admin/login, 都用第2個(gè)參數(shù)中的匿名函數(shù)去響應(yīng)所有HTTP動(dòng)作 .
*/
Route::any("Admin/login",function(){ return "hello world"; });
2、路由傳參
Laravel的路由傳參參數(shù)必須使用花括號(hào)來(lái)包裹并且是拼音字母例如使用{id}表示$id參數(shù),具體示例如下圖所示:
3、路由正則約束
即當(dāng)我們要驗(yàn)證一些字段的時(shí)候,在laravel中,我們可以直接在路由中作出限制。
普通形式
->where("要限制的參數(shù)名","限制規(guī)則(正則,不用斜線//)");
數(shù)組形式
->where(["要限制的參數(shù)名1"=>"限制規(guī)則1(正則,不用斜線//)","要限制的參數(shù)名2"=>"限制規(guī)則2(正則,不用斜線//)"]);
如下圖所示:
4、資源路由
例如:我們先用artisan命令,生成一個(gè)控制器:
php artisan make:controller PhotoController --resource
(artisan命令還有很多,可以極大地提高我們的開發(fā)速度)
接下來(lái)為這個(gè)控制器注冊(cè)一個(gè)資源路由:
Route::resource("photo","PhotoController");
此時(shí)打開cmd命令行 輸入php artisan route:list ,可以看到如下圖
這個(gè)路由聲明創(chuàng)建多個(gè)路由來(lái)處理資源上的各種行為。生成的控制器為每個(gè)行為保留了方法,
同時(shí)還包括了 處理 HTTP 動(dòng)作和 URI 的聲明注釋。
這里需要注意的是因?yàn)?HTML 表單不能生成 PUT、 PATCH 或者 DELETE 請(qǐng)求,所以你需要添加一個(gè)隱藏的 _method 輸入字段來(lái)偽造這些 HTTP 動(dòng)作。輔助函數(shù) method_field 可以幫你創(chuàng)建這個(gè)字段:
{{ method_field("PUT") }}
或者在表單中加入像這樣
表單提交方式不需要變,依舊是 method="POST"即可。
5、控制器路由(5.3以后已經(jīng)取消了,不再贅述)
每條地址規(guī)則都要定義路由,豈不是很累,laravel有一個(gè)控制器路由,很好的解決了這個(gè)問(wèn)題。
Route::controller("/example", "ExampleController"); (5.3已棄用)
6、路由組
在很多模塊操作中我們需要把路由分組,對(duì)于他們進(jìn)行權(quán)限分組限制,這時(shí)候我們就可以使用路由組結(jié)合中間件Middleware來(lái)進(jìn)行簡(jiǎn)單的限制。
1)建立中間件
首先我們?cè)趹?yīng)用根目錄下運(yùn)行如下Artisan命令生成一個(gè)測(cè)試用的中間件TestMiddleware:
php artisan make:middleware TestMiddleware
這樣會(huì)在/app/Http/Middleware目錄下生成一個(gè)TestMiddleware.php文件,
打開該文件編輯TestMiddleware類的handle方法如下:
public function handle($request, Closure $next) { if($request->input("age")<18) return redirect()->route("refuse"); return $next($request); }
我們?cè)谥虚g件中定義這段業(yè)務(wù)邏輯的目的是年齡18歲以下的未成年人不能訪問(wèn)。
2)新增中間件屬性
然后我們打開/app/Http/Kernal.php文件,新增TestMiddleware到Kernel的$routeMiddleware屬性:
test" => AppHttpMiddlewareTestMiddleware::class,到數(shù)組中去
3)定義路由組
Route::group(["middleware"=>"test"],function(){ Route::get("/write/laravelacademy",function(){ //使用Test中間件 }); Route::get("/update/laravelacademy",function(){ //使用Test中間件 }); }); Route::get("/age/refuse",["as"=>"refuse",function(){ return "未成年人禁止入內(nèi)!"; }]);
此時(shí),我們?cè)L問(wèn)127.0.0.1:9999/write/laravelacademy?age=15時(shí)候,
就會(huì)自動(dòng)跳轉(zhuǎn)到http://127.0.0.1:9999/age/refuse。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/30614.html
摘要:新增一篇新聞新增失敗輸入不符合要求請(qǐng)輸入標(biāo)題請(qǐng)輸入內(nèi)容新增文章上面代碼中的是為了防攻擊的,每個(gè)表單都必須存在。 本文我將結(jié)合簡(jiǎn)單例子,完成laravel框架下的增刪改查,希望會(huì)對(duì)大家有所幫助。在進(jìn)行之前,大家應(yīng)該保證自己的數(shù)據(jù)庫(kù)鏈接無(wú)誤,artisan命令能正常使用,路由鏈接無(wú)問(wèn)題。 一、創(chuàng)建控制器、路由避免影響其他路由,我們先注釋掉之前聯(lián)系時(shí)編寫的所有路由。因?yàn)樯弦徽挛覀円呀?jīng)學(xué)會(huì)建立...
摘要:從而達(dá)到了軟刪除。不過(guò),你可以通過(guò)在查詢中調(diào)用方法來(lái)強(qiáng)制查詢已被軟刪除的模型方法也可以被用在關(guān)聯(lián)查詢只取出軟刪除數(shù)據(jù)會(huì)只取出軟刪除數(shù)據(jù)恢復(fù)被軟刪除的模型有時(shí)候你可能希望取消刪除一個(gè)已被軟刪除的模型。 Laravel 有三寶,路由、容器和 Eloquent ORM,Eloquent ORM。我個(gè)人一直比較推薦于在實(shí)際操作中學(xué)習(xí),之前簡(jiǎn)單了解了路由和Eloquent ORM的基本用法,今天...
摘要:打開瀏覽器輸入,如無(wú)意外,將出現(xiàn)如下圖,表示框架安裝成功。四系統(tǒng)內(nèi)部后臺(tái)管理系統(tǒng)這個(gè)是框架自帶的后臺(tái)登錄管理系統(tǒng),只需要簡(jiǎn)單的命令即可運(yùn)行。出現(xiàn)上圖即為,創(chuàng)建模型成功。 在PHP個(gè)各種web開發(fā)框架中,laravel算是一款簡(jiǎn)潔、優(yōu)雅的開發(fā)框架,本人也剛剛接觸到laravel,通過(guò)學(xué)習(xí)大神們的一些文章,下面是我的一些心得體會(huì),希望可以給初學(xué)者一些幫助,大家一起進(jìn)步。言歸正傳: 本人環(huán)境...
摘要:原文發(fā)表在我的個(gè)人網(wǎng)站系列入門教程一最適合中國(guó)人的教程本教程示例代碼見大家在任何地方卡住,最快捷的解決方式就是去看我的示例代碼。在此我推薦一個(gè)全量中國(guó)鏡像。 原文發(fā)表在我的個(gè)人網(wǎng)站:Laravel 5 系列入門教程(一)【最適合中國(guó)人的 Laravel 教程】 本教程示例代碼見:https://github.com/johnlui/Learn-Laravel-5 大...
摘要:原文發(fā)表在我的個(gè)人網(wǎng)站深入理解一基本概念及用法在本系列文章中,我將跟大家一起學(xué)習(xí)的基本用法,探索的各種高級(jí)功能,理解背后的運(yùn)行原理,并最終達(dá)到深入理解靈活使用的目的。下一步深入理解二中間操作流 原文發(fā)表在我的個(gè)人網(wǎng)站:深入理解 Laravel Eloquent(一)——基本概念及用法 在本系列文章中,我將跟大家一起學(xué)習(xí) Eloquent 的基本用法,探索 Eloquent 的各種...
閱讀 3812·2021-10-13 09:40
閱讀 3261·2021-10-09 09:53
閱讀 3638·2021-09-26 09:46
閱讀 1925·2021-09-08 09:36
閱讀 4350·2021-09-02 09:46
閱讀 1372·2019-08-30 15:54
閱讀 3245·2019-08-30 15:44
閱讀 1090·2019-08-30 11:06