Laravel框架路由配置總結(jié)、設(shè)置技巧大全
基本路由
您的應(yīng)用程序的絕大多數(shù)路由將在 app/routes.php 文件中定義。Laravel 中最簡(jiǎn)單的路由由一個(gè) URI 和一個(gè)閉包調(diào)用組成。
基本 GET 路由
Route::get('/', function()
{
return 'Hello World';
});
基本 POST 路由
Route::post('foo/bar', function()
{
return 'Hello World';
});
注冊(cè)一個(gè)路由以響應(yīng)所有 HTTP 方法
Route::any('foo', function()
{
return 'Hello World';
});
強(qiáng)制一個(gè)路由必須通過 HTTPS 訪問
Route::get('foo', array('https', function()
{
return 'Must be over HTTPS';
}));
經(jīng)常您需要根據(jù)路由產(chǎn)生 URLs,您可以通過使用 URL::to 方法:
路由參數(shù)
Route::get('user/{id}', function($id)
{
return 'User '.$id;
});
可選的路由參數(shù)
Route::get('user/{name?}', function($name = null)
{
return $name;
});
帶默認(rèn)值的可選的路由參數(shù)
Route::get('user/{name?}', function($name = 'John')
{
return $name;
});
帶正則表達(dá)式約束的路由
Route::get('user/{name}', function($name)
{
//
})
->where('name', '[A-Za-z]+');
Route::get('user/{id}', function($id)
{
//
})
->where('id', '[0-9]+');
路由過濾器
路由過濾器提供了一種限制訪問指定路由的簡(jiǎn)單的方法,這在您需要為您的站點(diǎn)創(chuàng)建需要認(rèn)證區(qū)域的時(shí)候非常有用。Laravel 框架中包含了一些路由過濾器,比如 auth 過濾器、auth.basic 過濾器、guest 過濾器、以及 csrf 過濾器。它們被存放在 app/filters.php 文件中。
定義一個(gè)路由過濾器
Route::filter('old', function()
{
if (Input::get('age') < 200)
{
return Redirect::to('home');
}
});
如果一個(gè)響應(yīng)從一個(gè)路由過濾器中返回,這個(gè)響應(yīng)即被認(rèn)為是這個(gè)請(qǐng)求的響應(yīng),路由將不被執(zhí)行,任何關(guān)于這個(gè)路由的 after 過濾器也將被取消執(zhí)行。
為一個(gè)路由指定一個(gè)路由過濾器
Route::get('user', array('before' => 'old', function()
{
return 'You are over 200 years old!';
}));
為一個(gè)路由指定多個(gè)路由過濾器
Route::get('user', array('before' => 'auth|old', function()
{
return 'You are authenticated and over 200 years old!';
}));
指定路由過濾器參數(shù)
Route::filter('age', function($route, $request, $value)
{
//
});
Route::get('user', array('before' => 'age:200', function()
{
return 'Hello World';
}));
當(dāng)路由過濾器接收到作為第三個(gè)參數(shù)的響應(yīng) $response:
Route::filter('log', function($route, $request, $response, $value)
{
//
});
基本路由過濾器的模式
您可能希望根據(jù) URI 為一組路由指定過濾器。
Route::filter('admin', function()
{
//
});
Route::when('admin/*', 'admin');
在上面的例子中,admin 過濾器將應(yīng)用帶所有以 admin/ 開頭的路由。星號(hào)作為一個(gè)通配符,將適配到所有字符的組合。
您也可以通過指定 HTTP 方法約束模式過濾器:
Route::when('admin/*', 'admin', array('post'));
過濾器類
對(duì)于高級(jí)的過濾器,您可以使用一個(gè)類代替閉包函數(shù)。因?yàn)檫^濾器類是位于應(yīng)用程序之外的 IoC 容器,您能夠在過濾器中使用依賴注入,更易于測(cè)試。
定義一個(gè)過濾器類
class FooFilter {
public function filter()
{
// Filter logic...
}
}
注冊(cè)一個(gè)基于類的過濾器
Route::filter('foo', 'FooFilter');
命名路由
命名路由在更易于在生成跳轉(zhuǎn)或 URLs 時(shí)指定路由。您可以像這樣為路由指定一個(gè)名字:
Route::get('user/profile', array('as' => 'profile', function()
{
//
}));
您也可以為控制器的方法指定路由名字:
Route::get('user/profile', array('as' => 'profile', 'uses' =>
'UserController@showProfile'));
現(xiàn)在您在生成 URLs 或跳轉(zhuǎn)的時(shí)候使用路由的名字:
$url = URL::route('profile');
$redirect = Redirect::route('profile');
您可以使用 currentRouteName 方法獲取一個(gè)路由的名字:
$name = Route::currentRouteName();
路由組
有些時(shí)候您可能希望應(yīng)用過濾器到一組路由。您不必要為每個(gè)路由指定過濾器,可以使用路由組:
Route::group(array('before' => 'auth'), function()
{
Route::get('/', function()
{
// Has Auth Filter
});
Route::get('user/profile', function()
{
// Has Auth Filter
});
});
子域名路由
Laravel 路由也能夠處理通配符的子域名,并且從域名中獲取通配符參數(shù):
注冊(cè)子域名路由
Route::group(array('domain' => '{account}.myapp.com'), function()
{
Route::get('user/{id}', function($account, $id)
{
//
});
});
路由前綴
一組路由可以通過在屬性數(shù)組中使用 prefix 選項(xiàng)為路由組添加前綴:
為路由組添加前綴
Route::group(array('prefix' => 'admin'), function()
{
Route::get('user', function()
{
//
});
});
路由模型綁定
模型綁定提供了一個(gè)簡(jiǎn)單的方法向路由中注入模型。比如,不僅注入一個(gè)用戶的 ID,您可以根據(jù)指定的 ID 注入整個(gè)用戶模型實(shí)例。首先使用 Route::model 方法指定所需要的模型:
為模型綁定一個(gè)變量
Route::model('user', 'User');
然后, 定義一個(gè)包含 {user} 參數(shù)的路由:
Route::get('profile/{user}', function(User $user)
{
//
});
因?yàn)槲覀円呀?jīng)綁定 {user} 參數(shù)到 User 模型,一個(gè) User 實(shí)例將被注入到路由中。因此,比如一個(gè) profile/1 的請(qǐng)求將注入一個(gè) ID 為 1 的 User 實(shí)例。
注意: 如果在數(shù)據(jù)庫中沒有找到這個(gè)模型實(shí)例,將引發(fā)404錯(cuò)誤。
如果您希望指定您自己定義的沒有找到的行為,您可以為 model 方法傳遞一個(gè)閉包作為第三個(gè)參數(shù):
Route::model('user', 'User', function()
{
throw new NotFoundException;
});
有時(shí)您希望使用自己的方法處理路由參數(shù),可以使用 Route::bind 方法:
Route::bind('user', function($value, $route)
{
return User::where('name', $value)->first();
});
引發(fā)404錯(cuò)誤
有兩種方法在路由中手動(dòng)觸發(fā)一個(gè)404錯(cuò)誤。首先,您可以使用 App::abort 方法:
App::abort(404);
其次,您可以拋出一個(gè) Symfony\Component\HttpKernel\Exception\NotFoundHttpException 的實(shí)例。
更多關(guān)于處理404異常和為這些錯(cuò)誤使用使用自定義響應(yīng)的信息可以在 錯(cuò)誤 章節(jié)中找到。
路由至控制器
Laravel 不僅允許您路由至閉包,也可以路由至控制器類,甚至允許創(chuàng)建 資源控制器.
更多信息請(qǐng)?jiān)L問 控制器 文檔。
- Laravel框架源碼解析之模型Model原理與用法解析
- Laravel框架源碼解析之入口文件原理分析
- Laravel框架源碼解析之反射的使用詳解
- Laravel 框架控制器 Controller原理與用法實(shí)例分析
- Laravel框架數(shù)據(jù)庫CURD操作、連貫操作總結(jié)
- PHP開發(fā)框架Laravel數(shù)據(jù)庫操作方法總結(jié)
- Laravel框架中擴(kuò)展函數(shù)、擴(kuò)展自定義類的方法
- Laravel 5 框架入門(一)
- Laravel 5框架學(xué)習(xí)之?dāng)?shù)據(jù)庫遷移(Migrations)
- Laravel 5框架學(xué)習(xí)之向視圖傳送數(shù)據(jù)
- Laravel 5框架學(xué)習(xí)之用戶認(rèn)證
- Laravel框架集合用法實(shí)例淺析
相關(guān)文章
PHP實(shí)現(xiàn)數(shù)據(jù)庫的增刪查改功能及完整代碼
這篇文章主要介紹了PHP實(shí)現(xiàn)數(shù)據(jù)庫的增刪查改功能及完整代碼,需要的朋友可以參考下2018-04-04Yii2.0表關(guān)聯(lián)查詢實(shí)例分析
這篇文章主要介紹了Yii2.0表關(guān)聯(lián)查詢的方法,結(jié)合實(shí)例形式分析了Yii中關(guān)聯(lián)查詢的實(shí)現(xiàn)方法與相關(guān)使用技巧,需要的朋友可以參考下2016-07-07php設(shè)計(jì)模式之原型模式分析【星際爭(zhēng)霸游戲案例】
這篇文章主要介紹了php設(shè)計(jì)模式之原型模式,結(jié)合星際爭(zhēng)霸游戲案例形式分析了PHP原型模式的原理、使用方法與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03基于php socket(fsockopen)的應(yīng)用實(shí)例分析
本篇文章是對(duì)php socket(fsockopen)的應(yīng)用實(shí)例進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php微信公眾賬號(hào)開發(fā)之前五個(gè)坑(一)
這篇文章主要為大家詳細(xì)介紹了php微信公眾賬號(hào)開發(fā)之前五個(gè)坑,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09PHP使用Redis隊(duì)列執(zhí)行定時(shí)任務(wù)實(shí)例講解
這篇文章主要介紹了PHP使用Redis隊(duì)列執(zhí)行定時(shí)任務(wù)實(shí)例講解,redis隊(duì)列是比較常用的功能,有感興趣的同學(xué)可以學(xué)習(xí)下2021-03-03PHP版本升級(jí)到7.x后wordpress的一些修改及wordpress技巧
這篇文章主要介紹了PHP版本升級(jí)到7.x后wordpress的一些修改及wordpress技巧的相關(guān)資料,需要的朋友可以參考下2015-12-12