首頁  >  文章  >  php框架  >  Laravel5.2中HTTP路由、建立控制器與資源路由的介紹(附程式碼)

Laravel5.2中HTTP路由、建立控制器與資源路由的介紹(附程式碼)

不言
不言轉載
2019-01-19 09:47:403434瀏覽

這篇文章帶給大家的內容是關於Laravel5.2中HTTP路由、建立控制器和資源路由的介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

一、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/ArticleController.php 檔案(Admin 資料夾不存在時會自動建立),內建的7 個方法如下:

<?php
 
namespace 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(&#39;prefix&#39; => &#39;admin&#39;, &#39;namespace&#39; => &#39;Admin&#39;), function(){
    Route::get(&#39;login&#39;, &#39;IndexController@login&#39;);
    Route::get(&#39;index&#39;, &#39;IndexController@index&#39;);
    // 资源路由
    Route::resource(&#39;article&#39;, &#39;ArticleController&#39;);
});

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

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

#

以上是Laravel5.2中HTTP路由、建立控制器與資源路由的介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除