官方文檔傳送門:http://laravelacademy.org/post/7856.html
依賴
在A類中有B類的實例雏婶,則稱A對B有一個依賴
依賴注入
在A類中獲取到的B類的實例是通過外部傳進(jìn)來的這種就稱作依賴注入
訪問請求實例
在控制器中獲取當(dāng)前請求實例,只需要在構(gòu)造方法或普通方法中對Illuminate\Http\Request 類進(jìn)行依賴注入即可茉稠,具體實現(xiàn)如下:
在App\Http\Controllers\UserController.php控制器下的store方法進(jìn)行依賴注入獲取當(dāng)前請求的name值
public function store(Request $request){
$name = $request -> input('name');
echo "$name";
}
創(chuàng)建控制器路由訪問該控制器下的store方法:
Route::get('store','UserController@store');
瀏覽器中輸入:http://localhost:8000/store?name=12馍管,結(jié)果如下:
路由參數(shù)
如果還期望在控制器方法中獲取路由參數(shù)笤妙,只需要將路由參數(shù)置于其它依賴之后即可岭佳,具體實現(xiàn)如下:
在App\Http\Controllers\UserController.php控制器中通過依賴注入獲取路由里的參數(shù)
我們稍微對上述store方法和路由進(jìn)行一下小小的修改:
//store方法修改為
public function store(Request $request,$id){
$name = $request -> input('name');
echo "name:$name "." id:$id";
}
//web.app下路由修改為:
Route::get('store/{id}','UserController@store');
瀏覽器中輸入http://localhost:8000/store/1?name=12歪今,結(jié)果如下:
通過路由閉包訪問請求
這種情況就是直接在路由里通過注入Illuminate\Http\Request,在執(zhí)行閉包函數(shù)的時候服務(wù)容器會自動注入輸入請求,具體實現(xiàn)如下洗贰,
Route::get('re',function(Illuminate\Http\Request $request){
$name = $request -> input('name');
echo "$name";
});
在瀏覽器中輸入:http://localhost:8000/re?name=12找岖,結(jié)果如下:
請求路徑 & 請求方法
Illuminate\Http\Request 繼承自 Symfony\Component\HttpFoundation\Request 類,提供了多個方法來檢測應(yīng)用的 HTTP 請求敛滋,下面我們來演示其提供的一些獲取請求路徑和請求方式的方法:
獲取請求路徑
path方法將會返回請求的路徑信息许布,如果請求URL是 http://localhost:8000/user/1,則 path 方法將會返回 user/1,具體實現(xiàn)如下:
路由如下:
Route::get("user/{id}",function(Illuminate\Http\Request $request){
$path = $request -> path();
echo $path;
});
訪問上述路由結(jié)果如下:
is 方法允許你驗證請求路徑是否與給定模式匹配绎晃。該方法參數(shù)支持 * 通配符
修改上述路由如下:
Route::get("user/{id}",function(Illuminate\Http\Request $request){
if($request->is('user/1')){
echo '你的路徑對了哦';
}else{
echo "你好像輸錯路徑了哦";
}
});
訪問對的路徑:http://localhost:8000/user/1
訪問錯的路徑:http://localhost:8000/user/3
通配符*
修改路由里的閉包方法如下:
Route::get("user/{id}",function(Illuminate\Http\Request $request){
if($request->is('user/*')){
echo '你的路徑對了哦';
}else{
echo "你好像輸錯路徑了哦";
}
});
路徑一直都匹配蜜唾;
獲取請求URL
想要獲取完整的 URL,而不僅僅是路徑信息庶艾,可以使用請求實例提供的 url 或 fullUrl 方法袁余, url 方法返回不帶查詢字符串的 URL,而 fullUrl 方法返回結(jié)果則包含查詢字符串咱揍,具體實現(xiàn)如下:
依舊把Illuminate\Http\Request依賴注入到路由里:
Route::get('url',function(Illuminate\Http\Request $request){
// 不包含查詢字符串
$url = $request -> url();
echo "$url";
// 包含查詢字符串
$url_with_query = $request->fullUrl();
echo "</br> $url_with_query";
});
訪問:http://localhost:8000/url?name=l 結(jié)果如下:
獲取請求方法
method 方法將會返回 HTTP 請求方式颖榜。你還可以使用 isMethod 方法來驗證 HTTP 請求方式是否匹配給定字符串,具體實現(xiàn)如下:
Route::get("mo",function(Illuminate\Http\Request $request){
$method = $request->method(); // GET/POST
echo "$method</br>";
if($request->isMethod('post')){
echo "POST提交";
}else{
echo "其他提交";
}
});
訪問:http://localhost:8000/mo 結(jié)果如下: