本篇內(nèi)容介紹了“學習Laravel路由的方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
10年積累的網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有漳平免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。基本路由
應(yīng)用中的大多數(shù)路都會定義在 app/routes.php 文件中。最簡單的Laravel路由由URI和閉包回調(diào)函數(shù)組成。
基本 GET 路由
復(fù)制代碼 代碼如下:
Route::get('/', function()
{
return 'Hello World';
});
基本 POST 路由
復(fù)制代碼 代碼如下:
Route::post('foo/bar', function()
{
return 'Hello World';
});
注冊一個可以響應(yīng)任何HTTP動作的路由
復(fù)制代碼 代碼如下:
Route::any('foo', function()
{
return 'Hello World';
});
僅支持HTTPS的路由
復(fù)制代碼 代碼如下:
Route::get('foo', array('https', function()
{
return 'Must be over HTTPS';
}));
實際開發(fā)中經(jīng)常需要根據(jù)路由生成 URL,URL::to方法就可以滿足此需求:
$url = URL::to('foo');
路由參數(shù)
復(fù)制代碼 代碼如下:
Route::get('user/{id}', function($id)
{
return 'User '.$id;
});
可選路由參數(shù)
復(fù)制代碼 代碼如下:
Route::get('user/{name?}', function($name = null)
{
return $name;
});
帶有默認值的可選路由參數(shù)
復(fù)制代碼 代碼如下:
Route::get('user/{name?}', function($name = 'John')
{
return $name;
});
用正則表達式限定的路由參數(shù)
復(fù)制代碼 代碼如下:
Route::get('user/{name}', function($name)
{
//
})
->where('name', '[A-Za-z]+');
Route::get('user/{id}', function($id)
{
//
})
->where('id', '[0-9]+');
傳遞參數(shù)限定的數(shù)組
當然,必要的時候你還可以傳遞一個包含參數(shù)限定的數(shù)組作為參數(shù):
復(fù)制代碼 代碼如下:
Route::get('user/{id}/{name}', function($id, $name)
{
//
})
->where(array('id' => '[0-9]+', 'name' => '[a-z]+'))
定義全局模式
如果希望在全局范圍用指定正則表達式限定路由參數(shù),可以使用 pattern 方法:
復(fù)制代碼 代碼如下:
Route::pattern('id', '[0-9]+');
Route::get('user/{id}', function($id)
{
// Only called if {id} is numeric.
});
訪問路由參數(shù)
如果想在路由范圍外訪問路由參數(shù),可以使用 Route::input 方法:
復(fù)制代碼 代碼如下:
Route::filter('foo', function()
{
if (Route::input('id') == 1)
{
//
}
});
路由過濾器
路由過濾器提供了非常方便的方法來限制對應(yīng)用程序中某些功能訪問,例如對于需要驗證才能訪問的功能就非常有用。Laravel框架自身已經(jīng)提供了一些過濾器,包括 auth過濾器、auth.basic過濾器、guest過濾器以及csrf過濾器。這些過濾器都定義在app/filter.php文件中。
定義一個路由過濾器
復(fù)制代碼 代碼如下:
Route::filter('old', function()
{
if (Input::get('age') < 200)
{
return Redirect::to('home');
}
});
如果從路由過濾器中返回了一個response,那么該response將被認為對應(yīng)的是此次request,路由將不會被執(zhí)行,并且,此路由中所有定義在此過濾器之后的代碼也都不會被執(zhí)行。
為路由綁定過濾器
復(fù)制代碼 代碼如下:
Route::get('user', array('before' => 'old', function()
{
return 'You are over 200 years old!';
}));
將過濾器綁定為控制器Action
復(fù)制代碼 代碼如下:
Route::get('user', array('before' => 'old', 'uses' => 'UserController@showProfile'));
為路由綁定多個過濾器
復(fù)制代碼 代碼如下:
Route::get('user', array('before' => 'auth|old', function()
{
return 'You are authenticated and over 200 years old!';
}));
指定過濾器參數(shù)
復(fù)制代碼 代碼如下:
Route::filter('age', function($route, $request, $value)
{
//
});
Route::get('user', array('before' => 'age:200', function()
{
return 'Hello World';
}));
所有其后的過濾器將接收到 $response作為第三個參數(shù):
復(fù)制代碼 代碼如下:
Route::filter('log', function($route, $request, $response, $value)
{
//
});
基于模式的過濾器
你也可以指針對URI為一組路由指定過濾器。
復(fù)制代碼 代碼如下:
Route::filter('admin', function()
{
//
});
Route::when('admin/*', 'admin');
上述案例中,admin過濾器將會應(yīng)用到所有以admin/開頭的路由中。星號是通配符,將會匹配任意多個字符的組合。
還可以針對HTTP動作限定模式過濾器:
復(fù)制代碼 代碼如下:
Route::when('admin/*', 'admin', array('post'));
過濾器類
過濾器的高級用法中,還可以使用類來替代閉包函數(shù)。由于過濾器類是通過IoC container實現(xiàn)解析的,所有,你可以在這些過濾器中利用依賴注入(dependency injection)的方法實現(xiàn)更好的測試能力。
定義一個過濾器類
復(fù)制代碼 代碼如下:
class FooFilter {
public function filter()
{
// Filter logic...
}
}
注冊過濾器類
復(fù)制代碼 代碼如下:
Route::filter('foo', 'FooFilter');
命名路由
重定向和生成URL時,使用命名路由會更方便。你可以為路由指定一個名字,如下所示:
復(fù)制代碼 代碼如下:
Route::get('user/profile', array('as' => 'profile', function()
{
//
}));
還可以為 controller action指定路由名稱:
復(fù)制代碼 代碼如下:
Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));
現(xiàn)在,你可以使用路由名稱來創(chuàng)建URL和重定向:
復(fù)制代碼 代碼如下:
$url = URL::route('profile');
$redirect = Redirect::route('profile');
可以使用currentRouteName方法來獲取當前運行的路由名稱:
復(fù)制代碼 代碼如下:
$name = Route::currentRouteName();
路由組
有時你可能需要為一組路由應(yīng)用過濾器。使用路由組就可以避免單獨為每個路由指定過濾器了:
復(fù)制代碼 代碼如下:
Route::group(array('before' => 'auth'), function()
{
Route::get('/', function()
{
// Has Auth Filter
});
Route::get('user/profile', function()
{
// Has Auth Filter
});
});
子域名路由
Laravel中的路由功能還支持通配符子域名,你可以在域名中指定通配符參數(shù):
注冊子域名路由
復(fù)制代碼 代碼如下:
Route::group(array('domain' => '{account}.myapp.com'), function()
{
Route::get('user/{id}', function($account, $id)
{
//
});
});
路由前綴
可以通過prefix屬性為組路由設(shè)置前綴:
為路由組設(shè)置前綴
復(fù)制代碼 代碼如下:
Route::group(array('prefix' => 'admin'), function()
{
Route::get('user', function()
{
//
});
});
路由與模型綁定
模型綁定,為在路由中注入模型實例提供了便捷的途徑。例如,你可以向路由中注入匹配用戶ID的整個模型實例,而不是僅僅注入用戶ID。首先,使用 Route::model 方法指定要被注入的模型:
將參一個模型
Route::model('user', 'User');
然后,定義一個包含{user}參數(shù)的路由:
復(fù)制代碼 代碼如下:
Route::get('profile/{user}', function(User $user)
{
//
});
由于我們已將{user}參數(shù)綁定到了User模型,因此可以向路由中注入一個User實例。例如,對profile/1的訪問將會把ID為1的User實例注入到路由中。
注意: 如果在數(shù)據(jù)庫中無法匹配到對應(yīng)的模型實例,404錯誤將被拋出。
如果你希望自定義"not found"行為,可以通過傳遞一個閉包函數(shù)作為 model 方法的第三個參數(shù):
復(fù)制代碼 代碼如下:
Route::model('user', 'User', function()
{
throw new NotFoundException;
});
如果你想自己實現(xiàn)路由參數(shù)的解析,只需使用Route::bind方法即可:
復(fù)制代碼 代碼如下:
Route::bind('user', function($value, $route)
{
return User::where('name', $value)->first();
});
拋出 404 錯誤
有兩種從路由中手動觸發(fā)404錯誤的方法。首先,你可以使用App::abort方法:
復(fù)制代碼 代碼如下:
App::abort(404);
其次,你可以拋出Symfony\Component\HttpKernel\Exception\NotFoundHttpException異常。
更多關(guān)于處理404異常以及錯誤發(fā)生時自定義response的信息可以查看錯誤文檔。
控制器路由
Laravel不光提供了利用閉包函數(shù)處理路由的功能,還可以路由到控制器,甚至支持創(chuàng)建 resource controllers。
“學習Laravel路由的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
網(wǎng)站標題:學習Laravel路由的方法-創(chuàng)新互聯(lián)
新聞來源:http://bm7419.com/article46/dgcoeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、虛擬主機、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、做網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容