PHP Laravel學(xué)習(xí)之HTTP請(qǐng)求參數(shù)獲取

官方文檔傳送門(mén):http://laravelacademy.org/post/7856.html


依賴

在A類中有B類的實(shí)例,則稱A對(duì)B有一個(gè)依賴

依賴注入

在A類中獲取到的B類的實(shí)例是通過(guò)外部傳進(jìn)來(lái)的這種就稱作依賴注入

訪問(wèn)請(qǐng)求實(shí)例

在控制器中獲取當(dāng)前請(qǐng)求實(shí)例,只需要在構(gòu)造方法或普通方法中對(duì)Illuminate\Http\Request 類進(jìn)行依賴注入即可,具體實(shí)現(xiàn)如下:
在App\Http\Controllers\UserController.php控制器下的store方法進(jìn)行依賴注入獲取當(dāng)前請(qǐng)求的name值

public function store(Request $request){
        $name = $request -> input('name');
        echo "$name";
    }

創(chuàng)建控制器路由訪問(wèn)該控制器下的store方法:

Route::get('store','UserController@store');

瀏覽器中輸入:http://localhost:8000/store?name=12,結(jié)果如下:

獲取到請(qǐng)求中的name

路由參數(shù)

如果還期望在控制器方法中獲取路由參數(shù),只需要將路由參數(shù)置于其它依賴之后即可,具體實(shí)現(xiàn)如下:
在App\Http\Controllers\UserController.php控制器中通過(guò)依賴注入獲取路由里的參數(shù)
我們稍微對(duì)上述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é)果如下:

獲取路由參數(shù)

通過(guò)路由閉包訪問(wèn)請(qǐng)求

這種情況就是直接在路由里通過(guò)注入Illuminate\Http\Request,在執(zhí)行閉包函數(shù)的時(shí)候服務(wù)容器會(huì)自動(dòng)注入輸入請(qǐng)求,具體實(shí)現(xiàn)如下,

Route::get('re',function(Illuminate\Http\Request $request){
    $name = $request -> input('name');
    echo "$name";
});

在瀏覽器中輸入:http://localhost:8000/re?name=12,結(jié)果如下:

閉包路由獲取請(qǐng)求參數(shù)

請(qǐng)求路徑 & 請(qǐng)求方法

Illuminate\Http\Request 繼承自 Symfony\Component\HttpFoundation\Request 類,提供了多個(gè)方法來(lái)檢測(cè)應(yīng)用的 HTTP 請(qǐng)求,下面我們來(lái)演示其提供的一些獲取請(qǐng)求路徑和請(qǐng)求方式的方法:

獲取請(qǐng)求路徑

path方法將會(huì)返回請(qǐng)求的路徑信息,如果請(qǐng)求URL是 http://localhost:8000/user/1,則 path 方法將會(huì)返回 user/1,具體實(shí)現(xiàn)如下:
路由如下:

Route::get("user/{id}",function(Illuminate\Http\Request $request){
    $path = $request -> path();
    echo $path;
});

訪問(wèn)上述路由結(jié)果如下:



is 方法允許你驗(yàn)證請(qǐng)求路徑是否與給定模式匹配。該方法參數(shù)支持 * 通配符
修改上述路由如下:

Route::get("user/{id}",function(Illuminate\Http\Request $request){
    if($request->is('user/1')){
        echo '你的路徑對(duì)了哦';
    }else{
        echo "你好像輸錯(cuò)路徑了哦";
    }
});

訪問(wèn)對(duì)的路徑:http://localhost:8000/user/1


訪問(wèn)錯(cuò)的路徑:http://localhost:8000/user/3

通配符*
修改路由里的閉包方法如下:

Route::get("user/{id}",function(Illuminate\Http\Request $request){
    if($request->is('user/*')){
        echo '你的路徑對(duì)了哦';
    }else{
        echo "你好像輸錯(cuò)路徑了哦";
    }
});

路徑一直都匹配;



獲取請(qǐng)求URL

想要獲取完整的 URL,而不僅僅是路徑信息,可以使用請(qǐng)求實(shí)例提供的 url 或 fullUrl 方法, url 方法返回不帶查詢字符串的 URL,而 fullUrl 方法返回結(jié)果則包含查詢字符串,具體實(shí)現(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";
});

訪問(wèn):http://localhost:8000/url?name=l 結(jié)果如下:

獲取請(qǐng)求方法

method 方法將會(huì)返回 HTTP 請(qǐng)求方式。你還可以使用 isMethod 方法來(lái)驗(yàn)證 HTTP 請(qǐng)求方式是否匹配給定字符串,具體實(shí)現(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 "其他提交";
    }
});

訪問(wèn):http://localhost:8000/mo 結(jié)果如下:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評(píng)論 19 139
  • 先說(shuō)幾句廢話,調(diào)和氣氛。事情的起由來(lái)自客戶需求頻繁變更,偉大的師傅決定橫刀立馬的改革使用新的框架(created ...
    wsdadan閱讀 3,203評(píng)論 0 12
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,970評(píng)論 1 92
  • 訪問(wèn)請(qǐng)求實(shí)例 要通過(guò)依賴注入獲取當(dāng)前 HTTP 請(qǐng)求實(shí)例,需要在控制器的構(gòu)造函數(shù)或方法中對(duì) Illuminate\...
    伊Summer閱讀 1,708評(píng)論 0 3
  • 筆者是一枚程序員,同時(shí)也是個(gè)美食愛(ài)好者,一直想用技術(shù)做點(diǎn)自己的事情,剛好最近開(kāi)始研究逆向工程,實(shí)現(xiàn)下廚房作品自動(dòng)點(diǎn)...
    Aprilsky閱讀 2,194評(píng)論 0 9

友情鏈接更多精彩內(nèi)容