Laravel 5.2 二、HTTP路由、創建控制器 與 資源路由

来源:https://www.cnblogs.com/zmdComeOn/archive/2019/01/17/10284094.html
-Advertisement-
Play Games

一、HTTP路由 所有路由都定義在 App\Providers\RouteServiceProvider 類載入的 app/Http/routes.php文件中。 1. 基本路由 簡單的 Laravel 路由只接受一個 URI 和一個閉包 1 2 3 Route::get('foo', functi ...


一、HTTP路由

所有路由都定義在 App\Providers\RouteServiceProvider 類載入的 app/Http/routes.php文件中。

 

1. 基本路由

簡單的 Laravel 路由只接受一個 URI 和一個閉包

1 2 3 Route::get('foo'function () {     return 'Hello, Laravel!'; });

 

對於常見的 HTTP 請求,Laravel 有以下幾種路由

1 2 3 4 5 6 7 8 9 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. 路由參數

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 //單個路由參數 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. 命名路由

1 2 3 4 5 6 7 8 9 //命名閉包路由 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 路由首碼和命名空間

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

1 2 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 和 控制器方法 都有相同的部分,那麼,啟用路由分組可以提取出公共部分:

1 2 3 4 5 // 第一個數組參數中,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

1 php artisan make:controller Admin/ArticleController  --resource

這樣就生成了資源控制器在 app/Http/Controllers/Admin/ArticleController.php 文件(Admin 文件夾不存在時會自動創建),內置的 7 個方法如下 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 <?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)     {         //     } }

 

然後,定義資源路由 。這裡我還是選擇在路由分組下定義,定義一條就好

1 2 3 4 5 6 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、控制器方法、中間件都羅列出來了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、文件處理基本形式 二、打開文件的模式 三、操作文件的方法 ...
  • 哈哈,其實很簡單,寥寥幾行代碼網頁爬一部小說,不賣關子,立刻開始。 首先安裝所需的包,requests,BeautifulSoup4 控制台執行 pip install requests pip install BeautifulSoup4 如果不能正確安裝,請檢查你的環境變數,至於環境變數配置,在 ...
  • 因為http,https是無狀態的,也就是當我們連續兩次訪問同一個web網站,網站是無法分辨這兩次訪問是來自同一個人。對於它來說,這兩次訪問是沒有關係的。 就像是,我們進入了澡堂洗澡,中途要從入口出來接電話,可是當我們再次進去的時候,人家就不認識你了,還管著問你要貴賓卡呢!那麼怎麼讓這個門口迎賓能認 ...
  • 前兩次講了 Spark RPC 的基礎內容以及源碼時序分析。這次我們來看看Spark 如何用 RPC 實現心跳。 ...
  • 本文將帶你走進python3.7的新特性dataclass,通過本文你將學會dataclass的使用並避免踏入某些陷阱。 dataclass簡介 dataclass的使用 定義一個dataclass 深入dataclass裝飾器 數據類的基石——dataclasses.field 一些常用函數 da ...
  • Django 系列博客(十三) 前言 本篇博客介紹 Django 中的常用欄位和參數。 ORM 欄位 AutoField int 自增列,必須填入參數 primary_key=True。當 model 中如果沒有自增列,則會自動創建一個列名為 id 的列。 IntegerField 一個整數類型,範 ...
  • Shiro自身維護了一套session管理組件,它可以獨立使用,並不單純依賴WEB/Servlet/EJB容器等環境,使得它的session可以任何應用中使用。 2-Session)主要介紹在quickstart例子中從獲取Subject後,由初始化獲取Session並寫入讀出session參數的完 ...
  • ** read text file in pythoncapability: reading =text= from a text file 1. open the IDLE text editor >>> idle32. declare a *string* variable that holds ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...