PHP Laravel框架路由配置及設定技巧全解
Laravel框架在PHP開發中使用十分廣泛,本文主要對Laravel框架中的路由設定作詳細的介紹,Laravel的路由配置非常靈活,如何設定好路由對PHP應用來說也是相當關鍵的。
基本路由
您的應用程式的絕大多數路由將在 app/routes.php 檔案中定義。Laravel 中最簡單的路由由一個 URI 和一個閉包呼叫組成。
基本 GET 路由
Route::get('/', function() { return 'Hello World'; });
基本 POST 路由
Route::post('foo/bar', function() { return 'Hello World'; });
註冊一個路由以響應所有 HTTP 方法
Route::any('foo', function() { return 'Hello World'; });
強制一個路由必須通過 HTTPS 訪問
Route::get('foo', array('https', function() { return 'Must be over HTTPS'; }));
經常您需要根據路由產生 URLs,您可以通過使用 URL::to 方法:
$url = URL::to('foo');
路由引數
Route::get('user/{id}', function($id) { return 'User '.$id; });
可選的路由引數
Route::get('user/{name?}', function($name = null) { return $name; });
帶預設值的可選的路由引數
Route::get('user/{name?}', function($name = 'John') { return $name; });
帶正規表示式約束的路由
Route::get('user/{name}', function($name) { // }) ->where('name', '[A-Za-z]+'); Route::get('user/{id}', function($id) { // }) ->where('id', '[0-9]+');
路由過濾器
路由過濾器提供了一種限制訪問指定路由的簡單的方法,這在您需要為您的站點建立需要認證區域的時候非常有用。Laravel 框架中包含了一些路由過濾器,比如 auth 過濾器、auth.basic 過濾器、guest 過濾器、以及 csrf 過濾器。它們被存放在 app/filters.php 檔案中。
定義一個路由過濾器
Route::filter('old', function() { if (Input::get('age') < 200) { return Redirect::to('home'); } });
如果一個響應從一個路由過濾器中返回,這個響應即被認為是這個請求的響應,路由將不被執行,任何關於這個路由的 after 過濾器也將被取消執行。
為一個路由指定一個路由過濾器
Route::get('user', array('before' => 'old', function() { return 'You are over 200 years old!'; }));
為一個路由指定多個路由過濾器
Route::get('user', array('before' => 'auth|old', function() { return 'You are authenticated and over 200 years old!'; }));
指定路由過濾器引數
Route::filter('age', function($route, $request, $value) { // }); Route::get('user', array('before' => 'age:200', function() { return 'Hello World'; }));
當路由過濾器接收到作為第三個引數的響應 $response:
Route::filter('log', function($route, $request, $response, $value) { // });
基本路由過濾器的模式
您可能希望根據 URI 為一組路由指定過濾器。
Route::filter('admin', function() { // }); Route::when('admin/*', 'admin');
在上面的例子中,admin 過濾器將應用帶所有以 admin/ 開頭的路由。星號作為一個萬用字元,將適配到所有字元的組合。
您也可以通過指定 HTTP 方法約束模式過濾器:
Route::when('admin/*', 'admin', array('post'));
過濾器類
對於高階的過濾器,您可以使用一個類代替閉包函式。因為過濾器類是位於應用程式之外的 IoC 容器,您能夠在過濾器中使用依賴注入,更易於測試。
定義一個過濾器類
class FooFilter { public function filter() { // Filter logic... } }
註冊一個基於類的過濾器
Route::filter('foo', 'FooFilter');
命名路由
命名路由在更易於在生成跳轉或 URLs 時指定路由。您可以像這樣為路由指定一個名字:
Route::get('user/profile', array('as' => 'profile', function() { // }));
您也可以為控制器的方法指定路由名字:
Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));
現在您在生成 URLs 或跳轉的時候使用路由的名字:
$url = URL::route('profile'); $redirect = Redirect::route('profile');
您可以使用 currentRouteName 方法獲取一個路由的名字:
$name = Route::currentRouteName();
路由組
有些時候您可能希望應用過濾器到一組路由。您不必要為每個路由指定過濾器,可以使用路由組:
Route::group(array('before' => 'auth'), function() { Route::get('/', function() { // Has Auth Filter }); Route::get('user/profile', function() { // Has Auth Filter }); });
子域名路由
Laravel 路由也能夠處理萬用字元的子域名,並且從域名中獲取萬用字元引數:
註冊子域名路由
Route::group(array('domain' => '{account}.myapp.com'), function() { Route::get('user/{id}', function($account, $id) { // }); });
路由字首
一組路由可以通過在屬性陣列中使用 prefix 選項為路由組新增字首:
為路由組新增字首
Route::group(array('prefix' => 'admin'), function() { Route::get('user', function() { // }); });
路由模型繫結
模型繫結提供了一個簡單的方法向路由中注入模型。比如,不僅注入一個使用者的 ID,您可以根據指定的 ID 注入整個使用者模型例項。首先使用 Route::model 方法指定所需要的模型:
為模型繫結一個變數
Route::model('user', 'User');
然後, 定義一個包含 {user} 引數的路由:
Route::get('profile/{user}', function(User $user) { // });
因為我們已經繫結 {user} 引數到 User 模型,一個 User 例項將被注入到路由中。因此,比如一個 profile/1 的請求將注入一個 ID 為 1 的 User 例項。
注意: 如果在資料庫中沒有找到這個模型例項,將引發404錯誤。
如果您希望指定您自己定義的沒有找到的行為,您可以為 model 方法傳遞一個閉包作為第三個引數:
Route::model('user', 'User', function() { throw new NotFoundException; });
有時您希望使用自己的方法處理路由引數,可以使用 Route::bind 方法:
Route::bind('user', function($value, $route) { return User::where('name', $value)->first(); });
引發404錯誤
有兩種方法在路由中手動觸發一個404錯誤。首先,您可以使用 App::abort 方法:
App::abort(404);
其次,您可以丟擲一個 Symfony\Component\HttpKernel\Exception\NotFoundHttpException 的例項。
更多關於處理404異常和為這些錯誤使用使用自定義響應的資訊可以在 錯誤 章節中找到。
路由至控制器
Laravel 不僅允許您路由至閉包,也可以路由至控制器類,甚至允許建立 資源控制器.
相關文章
- laravel路由配置Laravel路由
- laravel 使用路由api.phpLaravel路由APIPHP
- PHP DIY 系列------框架篇:5. 自定義配置和路由PHP框架路由
- 如何設定軟路由全國動態ip路由
- php禁用函式設定及檢視方法詳解PHP函式
- 路由器基礎介紹,及配置靜態路由,預設路由路由器
- (四)選單導航及路由設定路由
- Vivado使用技巧(11):設定FPGA配置模式FPGA模式
- laravel設定路由的使用提示404找不到頁面Laravel路由
- 路由設定路由
- 關於laravel 框架實現路由自動注入解決方法Laravel框架路由
- 優秀PHP優秀框架Laravel和Yii的詳解PHP框架Laravel
- laravel session 與 php session配置LaravelSessionPHP
- Gin 框架 - 安裝和路由配置框架路由
- tp-link路由器怎麼設定?TP-Link路由器設定圖解路由器圖解
- Laravel 路由 resource 方法:定義使用者資源路由Laravel路由
- 配置路由的預設class + 將axios設定全域性註冊路由iOS
- Laravel 5 框架效能最佳化技巧Laravel框架
- OpenEuler 網路卡配置檔案詳解及新增臨時路由與永久路由路由
- phpstudy 使用 PHP+nginx 配置 LaravelPHPNginxLaravel
- PHP DIY 系列------框架篇:3. 路由解析PHP框架路由
- 使用Laravel框架,怎麼通過訪問/xxxx/ooo.php也通過路由來使用Laravel框架PHP路由
- 高併發下的php.int及PHP-fpm設定PHP
- linux 路由表設定 之 route 指令詳解Linux路由
- Laravel PHP 框架網站重建技術分析LaravelPHP框架網站
- Android路由框架AnnoRouter:使用Java介面來定義路由跳轉Android路由框架Java
- Laravel setting 設定 / 系統設定 / 網站設定Laravel網站
- OpenWrt旁路由passwall設定路由
- 7.路由器配置及使用路由器
- php-fpm7.0 慢查詢設定及說明PHP
- 【OpenWrt】N1刷機過程及旁路由設定(通用)路由
- GoWeb開發_Iris框架講解(四):Iris框架設定操作GoWeb框架
- 明解STM32—GPIO應用設計篇之API函式及配置使用技巧API函式
- Laravel 小技巧 - 讓路由實現類似 Model::query 的效果Laravel路由
- Laravel-Casbin:在 Laravel 裡使用 Casbin(PHP 許可權管理框架)LaravelPHP框架
- Laravel 成為最佳 PHP 框架的 14 個理由!LaravelPHP框架
- Laravel成為最佳PHP框架的14個理由!LaravelPHP框架
- 路由器WiFi定時開關設定教程 路由器WiFi定時開關怎麼設定?路由器WiFi
- TP-link路由器 怎麼設定?用手機設定四天線tp-link路由器教程圖解路由器圖解