Laravel5.2中HTTP路由與建立控制器以及資源路由的樣本詳解

來源:互聯網
上載者:User

一、HTTP路由

所有路由都定義在 App\Providers\RouteServiceProvider 類載入的 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' => 'Admin\IndexController@index', 'as' => 'alias')); //或 name 方法鏈Route:get('user', 'Admin\IndexController@index')->name('alias'));

2. 路由分組

2.1 路由首碼和命名空間

例如,有兩條指向控制器方法的路由


Route::get('admin/login', 'Admin\IndexController@login');Route::get('admin/index', 'Admin\IndexController@index');

拿第一條來說,

參數一:admin/login 表示這個 URI 在請求網站根目錄下的 admin/login 資源,完整地址就是 http://網域名稱/admin/login (這裡開啟了 Apache 的路由重寫,隱藏了 “index.php“ ),這個請求被映射到第二個參數中指定的控制器方法。注意,網站根目錄是入口檔案所在目錄,在 Laravel 中就是 public 目錄,設定管理員時最好也指向這裡。

參數二:Admin\IndexController@login 表示這個控制器方法是在 App\Http\Controllers 命名空間下的,連起來就是 App\Http\Controllers\Admin\IndexController 控制器裡的 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 目錄。

這樣就產生了資源控制器在 app/Http/Controllers/Admin/ArticleController.php 檔案,內建的 7 個方法如下 :


<?phpnamespace App\Http\Controllers\Admin;use Illuminate\Http\Request;use App\Http\Requests;use App\Http\Controllers\Controller;class LinksController extends Controller{    /**     * 顯示一個資源的列表     *     * @return \Illuminate\Http\Response     */    public function index()    {        //    }    /**     * 顯示一個表單來建立一個新的資源     *     * @return \Illuminate\Http\Response     */    public function create()    {        //    }    /**     * 儲存最新建立的資源     *     * @param  \Illuminate\Http\Request  $request     * @return \Illuminate\Http\Response     */    public function store(Request $request)    {        //    }    /**     * 顯示指定的資源     *     * @param  int  $id     * @return \Illuminate\Http\Response     */    public function show($id)    {        //    }    /**     * 顯示一個表單來編輯指定的資源     *     * @param  int  $id     * @return \Illuminate\Http\Response     */    public function edit($id)    {        //    }    /**     * 更新指定的資源     *     * @param  \Illuminate\Http\Request  $request     * @param  int  $id     * @return \Illuminate\Http\Response     */    public function update(Request $request, $id)    {        //    }    /**     * 刪除指定的資源     *     * @param  int  $id     * @return \Illuminate\Http\Response     */    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、控制器方法、中介軟體都羅列出來了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.