基本路由
您的應用程式的絕大多數路由將在 app/routes.php 檔案中定義。 Laravel 中最簡單的路由由一個 URI 和一個閉包呼叫組成。
基本GET 路由
<span style="font-size: 16px;">Route::get('/', function()<br/>{<br/>return 'Hello World';<br/>});<br/></span>
基本POST 路由
<span style="font-size: 16px;">Route::post('foo/bar', function()<br/>{<br/>return 'Hello World';<br/>});<br/></span>
註冊一個路由以響應所有HTTP 方法
<span style="font-size: 16px;">Route::any('foo', function()<br/>{<br/> return 'Hello World';<br/>});<br/></span>
強制一個路由必須通過HTTPS 訪問
<span style="font-size: 16px;">Route::get('foo', array('https', function()<br/>{<br/> return 'Must be over HTTPS';<br/>}));<br/></span>
經常您需要根據路由產生URLs,您可以透過使用URL::to 方法:
<span style="font-size: 16px;">$url = URL::to('foo');<br/></span>
路由參數
<span style="font-size: 16px;">Route::get('user/{id}', function($id)<br/>{<br/>return 'User '.$id;<br/>});<br/></span>
的可選路由參數
<span style="font-size: 16px;">Route::get('user/{name?}', function($name = null)<br/>{<br/>return $name;<br/>});<br/></span>
帶預設值的可選的路由參數
<span style="font-size: 16px;">Route::get('user/{name?}', function($name = 'John')<br/>{<br/>return $name;<br/>});<br/></span>
帶正規表示式約束的路由
<span style="font-size: 16px;">Route::get('user/{name}', function($name)<br/>{<br/>//<br/>})<br/>->where('name', '[A-Za-z]+');<br/>Route::get('user/{id}', function($id)<br/>{<br/>//<br/>})<br/>->where('id', '[0-9]+');<br/></span>路由過濾器 路由過濾器提供了一種限制訪問指定路由的簡單的方法,這在您需要為您的站點創建需要認證區域的時候非常有用。 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'; }));當路由過濾器接收到作為第三個參數的響應過濾器可能希望根據URI 為一組路由指定過濾器。
Route::filter('log', function($route, $request, $response, $value) { // });在上面的範例中,admin 過濾器將套用帶有所有以 admin/ 開頭的路由。星號作為一個通配符,將適配到所有字元的組合。 您也可以透過指定 HTTP 方法約束模式過濾器:
Route::filter('admin', function() { // }); Route::when('admin/*', 'admin');過濾器類別對於進階的過濾器,您可以使用一個類別來代替閉包函數。因為過濾器類別是位於應用程式之外的 IoC 容器,您能夠在過濾器中使用依賴注入,更易於測試。 定義一個過濾器類別
Route::when('admin/*', 'admin', array('post'));註冊一個基於類別的過濾器
class FooFilter { public function filter() { // Filter logic... } }命名路由命名路由在更易於在生成跳轉或 URLs 時指定路由。您可以像這樣為路由指定一個名字:
Route::filter('foo', 'FooFilter');您也可以為控制器的方法指定路由名字:
Route::get('user/profile', array('as' => 'profile', function() { // }));現在您在生成URLs 或跳轉的時候使用路由的名字:
Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));您可以使用currentRouteName方法取得一個路由的名字:
$url = URL::route('profile'); $redirect = Redirect::route('profile');路由組有些時候您可能會想要套用過濾器到一組路由。您不必要為每個路由指定過濾器,可以使用路由組:
$name = Route::currentRouteName();子域名路由 Laravel 路由也能夠處理通配符的子域名,並且從域名中獲取通配符參數:註冊子域名路由
Route::group(array('before' => 'auth'), function() { Route::get('/', function() { // Has Auth Filter }); Route::get('user/profile', function() { // Has Auth Filter }); });路由前綴一組路由可以透過在屬性數組中使用prefix 選項為路由組添加前綴:為路由組添加前綴
Route::group(array('domain' => '{account}.myapp.com'), function() { Route::get('user/{id}', function($account, $id) { // }); });路由模型綁定 〟中註入模型。例如,不僅注入一個使用者的 ID,您可以根據指定的 ID 注入整個使用者模型實例。首先使用Route::model 方法指定所需的模型:為模型綁定一個變數
Route::group(array('prefix' => 'admin'), function() { Route::get('user', function() { // }); });然後, 定義一個包含{user} 參數的路由:
Route::model('user', 'User');因為我們已經綁定{user} 參數到User模型,一個User 實例將被注入到路由中。因此,例如一個 profile/1 的請求將注入一個 ID 為 1 的 User 實例。 注意: 如果在資料庫中沒有找到這個模型實例,將引發404錯誤。 如果您希望指定您自己定義的沒有找到的行為,您可以為model 方法傳遞一個閉包作為第三個參數:
Route::get('profile/{user}', function(User $user) { // });有時您希望使用自己的方法處理路由參數,可以使用Route::bind方法:
Route::model('user', 'User', function() { throw new NotFoundException; });引發404錯誤 有兩種方法在路由中手動觸發一個404錯誤。首先,您可以使用 App::abort 方法:
Route::bind('user', function($value, $route) { return User::where('name', $value)->first(); });其次,您可以拋出一個 SymfonyComponentHttpKernelExceptionNotFoundHttpException 的實例。 更多關於處理404異常和為這些錯誤使用使用自訂回應的資訊可以在 錯誤 章節中找到。 路由至控制器Laravel 不僅允許您路由至閉包,也可以路由至控制器類,甚至允許創建 資源控制器.更多資訊請訪問 控制器 文件。
更多Laravel框架路由配置總結、設定技巧大全相關文章請關注PHP中文網!