您好,登錄后才能下訂單哦!
小編給大家分享一下Laravel框架路由與MVC的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
路由的作用就是將用戶的不同url請求轉(zhuǎn)發(fā)給相應(yīng)的程序進(jìn)行處理,laravel的路由定義在routes文件夾中,默認(rèn)提供了四個(gè)路由文件,其中web.php文件定義基本頁面請求。
最基本的路由請求是get與post請求,laravel通過Route對象來定義不同的請求方式。例如定義一個(gè)url為'req'的get請求,返回字符串‘get response':
Route::get('req',function (){ return 'get response'; });
當(dāng)我以get的方式請求http://localhost/Laravel/laravel52/public/req時(shí),返回如下:
同理,當(dāng)定義post請求時(shí),使用Route::post(url,function(){});
如果希望對多種請求方式采用相同的處理,可以使用match或any:
使用match來匹配對應(yīng)的請求方式,例如當(dāng)以get或post請求req2時(shí),都返回match response:
Route::match(['get','post'],'req2',function (){ return 'match response'; });
any會匹配任意請求方式,例如以任意方式請求req3,返回any response:
Route::any('req3',function (){ return 'any response'; });
必選參數(shù):當(dāng)以帶參數(shù)的形式發(fā)送請求時(shí),可以在路由中進(jìn)行接收,用大括號將參數(shù)括起,用/分割,例如:
Route::get('req4/{name}/{age}', function ($name, $age) { return "I'm {$name},{$age} years old."; });
以get請求時(shí)將參數(shù)傳遞,結(jié)果如下:
可選參數(shù):以上的參數(shù)是必須的,如果缺少某一個(gè)參數(shù)就會報(bào)錯(cuò),如果希望某個(gè)參數(shù)是可選的,可以為它加一個(gè)?,并設(shè)置默認(rèn)值,默認(rèn)參數(shù)必須為最后一個(gè)參數(shù),否則放中間沒法識別:
Route::get('req4/{name}/{age?}', function ($name, $age=0) { return "I'm {$name},{$age} years old."; });
正則校驗(yàn):可以通過where對請求中的參數(shù)進(jìn)行校驗(yàn)
Route::get('req4/{name}/{age?}', function ($name, $age=0) { return "I'm {$name},{$age} years old."; })->where(['name'=>'[A-Za-z]+','age'=>'[0-9]+']);
有時(shí)我們的路由可能有多個(gè)層級,例如定義一級路由home,其下有二級路由article,comment等,這就需要將article與comment放到home這個(gè)群組中。通過數(shù)組鍵prefix為路由article添加前綴home:
Route::group(['prefix' => 'home'], function () { Route::get('article', function () { return 'home/article'; }); });
這樣通過home/article就可以訪問到該路由了。
有時(shí)需要給路由起個(gè)名字,需要在定義路由時(shí)使用as數(shù)組鍵來指定路由名稱。例如將路由home/comment命名為comment,在生成url與重定向時(shí)就可以使用路由的名字comment:
Route::get('home/comment',['as'=>'comment',function(){ return route('comment'); //通過route函數(shù)生成comment對應(yīng)的url }]);
輸出為http://localhost/Laravel/laravel52/public/home/comment
route路由只對請求進(jìn)行分配跳轉(zhuǎn),具體的業(yè)務(wù)邏輯則需要由控制器來處理,控制器一般封裝成為一個(gè)php類??刂破鞯奈募话惴旁赼pp/Http/Controlers文件夾下。例如新建一個(gè)LoginController類繼承自Controller,定義checkLog方法回應(yīng)登錄請求,
namespace App\Http\Controllers; class LoginController extends Controller { public function checkLog($name){ return $name.'登錄成功'; } }
在route.php中將login請求分配到checkLog方法:
Route::get('login/{name}','LoginController@checkLog');
同樣的,可以為控制器路由起個(gè)名字,比如將其命名為login:
Route::get('login/{name}',['uses'=>'LoginController@checkLog','as'=>'login']);
controller負(fù)責(zé)處理應(yīng)用的邏輯,應(yīng)用的顯示則由視圖View負(fù)責(zé),這體現(xiàn)了MVC中不同的邏輯之間的分離。視圖一般位于/resource/views目錄下,一般一個(gè)controller文件對應(yīng)一個(gè)視圖文件夾,因此我創(chuàng)建的視圖為:views/Login/login.blade.php。blade文件是laravel的一個(gè)模板引擎,它編譯為PHP儲存起來。它包含HTML語言,可以在其中直接使用PHP,例如login.blade.php:
<!DOCTYPE Html> <html> <head> <title>登錄界面</title> </head> <body> {{$name}}登錄成功 </body> </html>
在controller的checkLog方法中調(diào)用視圖并傳入?yún)?shù):
public function checkLog($name){ return View('Login/login',[ "name"=>$name ]); }
在mvc中通過Models與數(shù)據(jù)庫中的表進(jìn)行交互,每個(gè)數(shù)據(jù)庫對應(yīng)一個(gè)Model模板。laravel并沒有定義models目錄,一般可以在app目錄下新建一個(gè)models文件夾存放模板文件。例如定義一個(gè)Student模板并指定表名與主鍵:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Student extends Model { protected $table='student'; protected $primaryKey='id'; }
在controller中通過Student模板查詢所有:
namespace App\Http\Controllers; use App\Models\Student; class Login { public static function showDB(){ $table=Student::all(); dd($table); } }
以上是“Laravel框架路由與MVC的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。