本篇文章給大家帶來的內容是關于laravel5.2中http路由、創建控制器和資源路由的介紹(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
一、HTTP路由
所有路由都定義在 AppProvidersRouteServiceProvider 類載入的?app/Http/routes.php文件中。
1. 基本路由
簡單的 Laravel 路由只接受一個 URI 和一個閉包
Route::get('foo',?function?()?{ ????return?'Hello,?Laravel!'; });
對于常見的 HTTP 請求,Laravel 有以下幾種路由
Route::get($uri,?$callback);?//響應?get?請求 Route::post($uri,?$callback); Route::put($uri,?$callback); Route::patch($uri,?$callback); Route::delete($uri,?$callback); Route::options($uri,?$callback); ? Route::match(['get',?'post'],?$uri,?$callback);?//響應?get,?post?請求 Route::any('foo',?$callback);?//響應所有請求
其中,$callback 可以是一個閉包,也可以是一個控制器方法。實際上,在開發中有不少情況是用作控制器方法的。
2. 路由參數
//單個路由參數 Route::get('user/{id}',?function?($id)?{ ????return?'User?'.$id; }); //多個路由參數 Route::get('posts/{post}/comments/{comment}',?function?($postId,?$commentId)?{ ????// }); //單個路由參數(可選) Route::get('user/{id?}',?function?($id?=?1)?{ ????return?'User?'.$id; }); //多個路由參數(可選) Route::get('posts/{post}/comments/{comment?}',?function?($postId,?$commentId?=?1)?{ ????// }); //注意:多個參數時,只可以對最后一個參數設置可選,其他位置設置可選會解析錯誤 ? //?正則約束單個參數 Route::get('user/{name?}',?function?($name?=?'Jone')?{ ????return?$name; })->where('name',?'w+');??//約束參數為單詞字符(數字、字母、下劃線) ? //?正則約束多個參數 Route::get('user/{id}/{name}',?function?($id,?$name)?{ ????// })->where(['id'?=>?'[0-9]+',?'name'?=>?'[a-z]+']);
二、創建控制器
使用 Artisan 命令創建?php artisan make:controller?UserController?
現在,在 app/Http/Controllers 這個控制器目錄下就生成了?UserController.php 的控制器文件。
三、高級路由
1. 命名路由
//命名閉包路由 Route:get('user',?array('as'?=>?'alial',?function(){}); //或?name?方法鏈 Route:get('user',?function(){})->name('alias'); ? //命名控制器方法路由 Route:get('user',?array('uses'?=>?'AdminIndexController@index',?'as'?=>?'alias')); //或?name?方法鏈 Route:get('user',?'AdminIndexController@index')->name('alias'));
2. 路由分組
2.1 路由前綴和命名空間
例如,有兩條指向控制器方法的路由
Route::get('admin/login',?'AdminIndexController@login'); Route::get('admin/index',?'AdminIndexController@index');
拿第一條來說,
參數一:admin/login??表示這個 URI 在請求網站根目錄下的 admin/login 資源,完整地址就是 ?http://域名/admin/login?(這里開啟了 Apache 的路由重寫,隱藏了 “index.php“ ),這個請求被映射到第二個參數中指定的控制器方法。注意,網站根目錄是入口文件所在目錄,在 Laravel 中就是 public 目錄,配置服務器時最好也指向這里。
參數二:AdminIndexController@login?表示這個控制器方法是在?AppHttpControllers?命名空間下的,連起來就是?AppHttpControllersAdminIndexController 控制器里的 login 方法。
顯然,兩條路由的 URI 和 控制器方法 都有相同的部分,那么,啟用路由分組可以提取出公共部分:
//?第一個數組參數中,prefix?鍵定義?URI?的公共部分,namespace?鍵定義方法名(命名空間語法)的公共部分 Route::group(array('prefix'?=>?'admin',?'namespace'?=>?'Admin'),?function(){ ????Route::get('login',?'IndexController@login'); ????Route::get('index',?'IndexController@index'); });
2.2 資源路由
資源路由就是映射到資源控制器的路由,Laravel 資源控制器內置了對資源增刪改查的 7 個方法以及 7 條路由。
首先,創建資源控制器?ArticleController
php?artisan?make:controller?Admin/ArticleController??--resource
這樣就生成了資源控制器在 app/Http/Controllers/Admin/ArticleController.php?文件(Admin 文件夾不存在時會自動創建),內置的 7 個方法如下 :
<?php namespace AppHttpControllersAdmin; use IlluminateHttpRequest; use AppHttpRequests; use AppHttpControllersController; class LinksController extends Controller { /** * 顯示一個資源的列表 * * @return IlluminateHttpResponse */ public function index() { // } /** * 顯示一個表單來創建一個新的資源 * * @return IlluminateHttpResponse */ public function create() { // } /** * 保存最新創建的資源 * * @param IlluminateHttpRequest $request * @return IlluminateHttpResponse */ public function store(Request $request) { // } /** * 顯示指定的資源 * * @param int $id * @return IlluminateHttpResponse */ public function show($id) { // } /** * 顯示一個表單來編輯指定的資源 * * @param int $id * @return IlluminateHttpResponse */ public function edit($id) { // } /** * 更新指定的資源 * * @param IlluminateHttpRequest $request * @param int $id * @return IlluminateHttpResponse */ public function update(Request $request, $id) { // } /** * 刪除指定的資源 * * @param int $id * @return IlluminateHttpResponse */ public function destroy($id) { // } }
然后,定義資源路由?。這里我還是選擇在路由分組下定義,定義一條就好
Route::group(array('prefix'?=>?'admin',?'namespace'?=>?'Admin'),?function(){ ????Route::get('login',?'IndexController@login'); ????Route::get('index',?'IndexController@index'); ????//?資源路由 ????Route::resource('article',?'ArticleController'); });
最后,查看路由。有了資源控制器 和 資源路由,就可以看一下對以上 7 個方法的 HTTP 請求方式了。
使用 Artisan 命令?php artisan route:list? 列出當前的所有路由,請求方式、URI、控制器方法、中間件都羅列出來了。