laravel route路由

基本路由php

您的應用程序的絕大多數路由將在 app/routes.php 文件中定義。Laravel 中最簡單的路由由一個 URI 和一個閉包調用組成。正則表達式

基本 GET 路由
數據庫

代碼以下:數組


Route::get('/', function()
{
return 'Hello World';
});閉包


基本 POST 路由
app

代碼以下:框架


Route::post('foo/bar', function()
{
return 'Hello World';
});dom


註冊一個路由以響應全部 HTTP 方法
函數

代碼以下:post


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 不只容許您路由至閉包,也能夠路由至控制器類,甚至容許建立 資源控制器.

更多信息請訪問 控制器 文檔。

相關文章
相關標籤/搜索