我們先來創建一個路由才測試請求實例
Route::controller('articles','ArticlesController');
創建相應方法:
public function getTest(Request $request) { $input = $request->input('test'); echo $input; }
訪問http://localhost:8000/articles/test?test=10 來測試。
獲取URL路徑和請求方法
Request還可以獲取url和uri路徑:
public function getTest(Request $request) { // 如果不是articles/路徑就拋出404 if (!$request->is('articles/*')){ abort(404); } $uri = $request->path(); $url = $request->url(); echo $uri; echo '<br />'; echo $url; }
獲取請求方法:
public function getTest(Request $request) { // 如果不是get方法就拋出404 if (!$request->isMethod('get')){ abort(404); } $method = $request->method(); echo $method; }
獲取請求數據
我們使用Request的input方法來獲取當前請求的輸入數據,注意看注釋哦:
public function getTest(Request $request) { // input方法可接受兩個參數 第一個參數是輸入數據的鍵,第二個參數是默認值,當沒有取得數據時使用默認值。 $name = $request->input('name','defaultName'); // input方法還支持數組取值 // 對應的輸入數據:http://......?test[][name]=balabala $test = $request->input('test.0.name'); echo $name; echo '<br />'; echo $test; }
使用這個url來測試:http://localhost:8000/articles/test?name=ask&test[][name]=test
我們可以使用has方法判斷參數是否存在
public function getTest(Request $request) { // 判斷參數是否存在 if ($request->has('name')){ echo $request->input('name'); } }
實際上我們可以使用一系列方法來獲取我們想要的輸出數據比如:only,except,all
public function getTest(Request $request) { // 獲取全部數據 $allData = $request->all(); // 只獲取name和age $onlyData = $request->only('name','age'); // 獲取除了name的所有數據 $exceptData = $request->except('name'); echo '<pre>'; print_r($allData); print_r($onlyData); print_r($exceptData); }
我們使用這個url來測試:http://localhost:8000/articles/test?name=ask&age=24&test=test
獲取上次的請求輸入
如果想要獲取上一次請求的輸入,需要在處理上一次請求時使用Request實例上的flash
方法將請求數據暫時保存到session中,然后在當前請求中使用Request實例上的old
方法獲取session中保存的數據,獲取到數據后就會將session中保存的請求數據銷毀:
public function getLastRequest(Request $request) { $request->flash(); } public function getCurrentRequest(Request $request) { $lastData = $request->old(); echo '<pre>'; print_r($lastData); }
我們先訪問http://localhost:8000/articles/last-request?name=last&some=some 然后訪問 http://localhost:8000/articles/current-request
如果你嫌這樣麻煩 也可以重定向 使用withinput方法 效果是一樣的:
public function getLastRequest(Request $request) { return redirect('/articles/current-request')->withInput(); } public function getCurrentRequest(Request $request) { $lastData = $request->old(); echo '<pre>'; print_r($lastData); }
獲取cookie數據
我們可以使用Request實例上的cookie
方法獲取cookie數據,該方法可以接收一個參數名返回對應的cookie值,如果不傳入參數,默認返回所有cookie值:
public function getCookie(Request $request) { $cookies = $request->cookie(); dd($cookies); }
我們可以調用Response實例上的withCookie
方法新增cookie:
public function getAddCookie() { $response = new Response(); //第一個參數是cookie名,第二個參數是cookie值,第三個參數是有效期(分鍾) $response->withCookie(cookie('cookie','learn-laravel',3)); //如果想要cookie長期有效使用如下方法 // $response->withCookie(cookie()->forever('cookie-name','cookie-value')); return $response; }
上傳文件
我們先來創建表單:
//文件上傳表單 public function getFileupload() { $postUrl = '/articles/fileupload'; $csrf_field = csrf_field(); $html = <<<CREATE <form action="$postUrl" method="POST" enctype="multipart/form-data"> $csrf_field <input type="file" name="file"><br/><br/> <input type="submit" value="提交"/> </form> CREATE; return $html; }
上傳文件操作:
public function postFileupload(Request $request) { // hasfile 判斷文件是否存在 參數值對應着表單中的name值 if (!$request->hasFile('file')){ exit('上傳文件為空'); } // 取到文件 $file = $request->file('file'); //判斷文件上傳過程中是否出錯 if (!$file->isValid()){ exit('文件上傳出錯'); } // 判斷路由是否存在 $destPath = public_path('images'); if (!file_exists($destPath)){ // 不存在就創建 mkdir($destPath,0755,true); } $filename = $file->getClientOriginalName(); if (!$file->move($destPath,$filename)){ exit('文件保存失敗'); } exit('文件上傳成功'); }