搜尋
首頁php教程PHP开发Laravel框架路由配置總結、設定技巧大全

基本路由

您的應用程式的絕大多數路由將在 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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器