首頁  >  文章  >  php教程  >  Laravel框架路由配置總結、設定技巧大全

Laravel框架路由配置總結、設定技巧大全

高洛峰
高洛峰原創
2016-12-27 11:12:491454瀏覽

基本路由

您的應用程式的絕大多數路由將在 app/routes.php 檔案中定義。 Laravel 中最簡單的路由由一個 URI 和一個閉包呼叫組成。

基本GET 路由

<span style="font-size: 16px;">Route::get(&#39;/&#39;, function()<br/>{<br/>return &#39;Hello World&#39;;<br/>});<br/></span>

基本POST 路由

<span style="font-size: 16px;">Route::post(&#39;foo/bar&#39;, function()<br/>{<br/>return &#39;Hello World&#39;;<br/>});<br/></span>

註冊一個路由以響應所有HTTP 方法

<span style="font-size: 16px;">Route::any(&#39;foo&#39;, function()<br/>{<br/>   return &#39;Hello World&#39;;<br/>});<br/></span>

強制一個路由必須通過HTTPS 訪問

<span style="font-size: 16px;">Route::get(&#39;foo&#39;, array(&#39;https&#39;, function()<br/>{<br/>    return &#39;Must be over HTTPS&#39;;<br/>}));<br/></span>

經常您需要根據路由產生URLs,您可以透過使用URL::to 方法:

<span style="font-size: 16px;">$url = URL::to(&#39;foo&#39;);<br/></span>

路由參數

<span style="font-size: 16px;">Route::get(&#39;user/{id}&#39;, function($id)<br/>{<br/>return &#39;User &#39;.$id;<br/>});<br/></span>

的可選路由參數

<span style="font-size: 16px;">Route::get(&#39;user/{name?}&#39;, function($name = null)<br/>{<br/>return $name;<br/>});<br/></span>

帶預設值的可選的路由參數

<span style="font-size: 16px;">Route::get(&#39;user/{name?}&#39;, function($name = &#39;John&#39;)<br/>{<br/>return $name;<br/>});<br/></span>

帶正規表示式約束的路由

<span style="font-size: 16px;">Route::get(&#39;user/{name}&#39;, function($name)<br/>{<br/>//<br/>})<br/>->where(&#39;name&#39;, &#39;[A-Za-z]+&#39;);<br/>Route::get(&#39;user/{id}&#39;, function($id)<br/>{<br/>//<br/>})<br/>->where(&#39;id&#39;, &#39;[0-9]+&#39;);<br/></span>

路由過濾器

  路由過濾器提供了一種限制訪問指定路由的簡單的方法,這在您需要為您的站點創建需要認證區域的時候非常有用。 Laravel 框架中包含了一些路由過濾器,例如 auth 過濾器、auth.basic 過濾器、guest 過濾器、以及 csrf 過濾器。它們被存放在 app/filters.php 檔案中。

定義一個路由過濾器

Route::filter(&#39;old&#39;, function()
{
if (Input::get(&#39;age&#39;) < 200)
{
return Redirect::to(&#39;home&#39;);
}
});

  如果一個回應從一個路由過濾器中返回,這個回應即被認為是這個請求的回應,路由將不被執行,任何關於這個路由的after 過濾器也將被取消執行。

Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;old&#39;, function()
{
return &#39;You are over 200 years old!&#39;;
}));

  為一個路由指定一個路由過濾器

Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;auth|old&#39;, function()
{
return &#39;You are authenticated and over 200 years old!&#39;;
}));

指定路由過濾器參數

Route::filter(&#39;age&#39;, function($route, $request, $value)
{
//
});
Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;age:200&#39;, function()
{
return &#39;Hello World&#39;;
}));

 當路由過濾器接收到作為第三個參數的響應過濾器可能希望根據URI 為一組路由指定過濾器。

Route::filter(&#39;log&#39;, function($route, $request, $response, $value)
{
//
});

在上面的範例中,admin 過濾器將套用帶有所有以 admin/ 開頭的路由。星號作為一個通配符,將適配到所有字元的組合。

您也可以透過指定 HTTP 方法約束模式過濾器:

Route::filter(&#39;admin&#39;, function()
{
//
});
Route::when(&#39;admin/*&#39;, &#39;admin&#39;);

過濾器類別

對於進階的過濾器,您可以使用一個類別來代替閉包函數。因為過濾器類別是位於應用程式之外的 IoC 容器,您能夠在過濾器中使用依賴注入,更易於測試。

定義一個過濾器類別

Route::when(&#39;admin/*&#39;, &#39;admin&#39;, array(&#39;post&#39;));

註冊一個基於類別的過濾器

class FooFilter {
public function filter()
{
// Filter logic...
}
}

命名路由

命名路由在更易於在生成跳轉或 URLs 時指定路由。您可以像這樣為路由指定一個名字:

Route::filter(&#39;foo&#39;, &#39;FooFilter&#39;);

您也可以為控制器的方法指定路由名字:

Route::get(&#39;user/profile&#39;, array(&#39;as&#39; => &#39;profile&#39;, function()
{
//
}));

 現在您在生成URLs 或跳轉的時候使用路由的名字:

  Route::get(&#39;user/profile&#39;, array(&#39;as&#39; => &#39;profile&#39;, &#39;uses&#39; => 
&#39;UserController@showProfile&#39;));

您可以使用currentRouteName方法取得一個路由的名字:

$url = URL::route(&#39;profile&#39;);
$redirect = Redirect::route(&#39;profile&#39;);

路由組

有些時候您可能會想要套用過濾器到一組路由。您不必要為每個路由指定過濾器,可以使用路由組:

$name = Route::currentRouteName();

子域名路由

  Laravel 路由也能夠處理通配符的子域名,並且從域名中獲取通配符參數:

註冊子域名路由

Route::group(array(&#39;before&#39; => &#39;auth&#39;), function()
{
Route::get(&#39;/&#39;, function()
{
// Has Auth Filter
});
Route::get(&#39;user/profile&#39;, function()
{
// Has Auth Filter
});
});

路由前綴

一組路由可以透過在屬性數組中使用prefix 選項為路由組添加前綴:

為路由組添加前綴

Route::group(array(&#39;domain&#39; => &#39;{account}.myapp.com&#39;), function()
{
Route::get(&#39;user/{id}&#39;, function($account, $id)
{
//
});
});

路由模型綁定

 〟中註入模型。例如,不僅注入一個使用者的 ID,您可以根據指定的 ID 注入整個使用者模型實例。首先使用Route::model 方法指定所需的模型:

為模型綁定一個變數

Route::group(array(&#39;prefix&#39; => &#39;admin&#39;), function()
{
Route::get(&#39;user&#39;, function()
{
//
});
});

然後, 定義一個包含{user} 參數的路由:

Route::model(&#39;user&#39;, &#39;User&#39;);

  因為我們已經綁定{user} 參數到User模型,一個User 實例將被注入到路由中。因此,例如一個 profile/1 的請求將注入一個 ID 為 1 的 User 實例。

  注意: 如果在資料庫中沒有找到這個模型實例,將引發404錯誤。

  如果您希望指定您自己定義的沒有找到的行為,您可以為model 方法傳遞一個閉包作為第三個參數:

Route::get(&#39;profile/{user}&#39;, function(User $user)
{
//
});

  有時您希望使用自己的方法處理路由參數,可以使用Route::bind方法:

Route::model(&#39;user&#39;, &#39;User&#39;, function()
{
throw new NotFoundException;
});

引發404錯誤

  有兩種方法在路由中手動觸發一個404錯誤。首先,您可以使用 App::abort 方法:

Route::bind(&#39;user&#39;, function($value, $route)
{
return User::where(&#39;name&#39;, $value)->first();
});

其次,您可以拋出一個 SymfonyComponentHttpKernelExceptionNotFoundHttpException 的實例。

更多關於處理404異常和為這些錯誤使用使用自訂回應的資訊可以在 錯誤 章節中找到。

路由至控制器

Laravel 不僅允許您路由至閉包,也可以路由至控制器類,甚至允許創建 資源控制器.

更多資訊請訪問 控制器 文件。

更多Laravel框架路由配置總結、設定技巧大全相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn