Laravel5.2中HTTP路由、創建控制器和資源路由的介紹(附代碼)

本篇文章給大家帶來的內容是關于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'?=&gt;?'admin',?'namespace'?=&gt;?'Admin'),?function(){ ????Route::get('login',?'IndexController@login'); ????Route::get('index',?'IndexController@index'); ????//?資源路由 ????Route::resource('article',?'ArticleController'); });

最后,查看路由。有了資源控制器 和 資源路由,就可以看一下對以上 7 個方法的 HTTP 請求方式了。

使用 Artisan 命令?php artisan route:list? 列出當前的所有路由,請求方式、URI、控制器方法、中間件都羅列出來了。

Laravel5.2中HTTP路由、創建控制器和資源路由的介紹(附代碼)

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享