1、訪問請求執行個體
通過依賴注入擷取當前HTTP請求執行個體,應該在控制器的建構函式或方法中對 Illuminate\Http\Request類進行類型提示,當前請求執行個體會被服務容器自動注入:
input('name'); // }}
如果你的控制器方法還期望擷取路由參數輸入,只需要將路由參數置於其它依賴之後即可,例如,如果你的路由定義如下:
$app->put('user/{id}','UserController@update');
你仍然可以對 Illuminate\Http\Request進行類型提示並通過如下方式定義控制器方法來訪問路由參數:
1.1 基本請求資訊
Illuminate\Http\Request執行個體提供了多個方法來檢測應用的HTTP請求,Lumen的 Illuminate\Http\Request繼承自 Symfony\Component\HttpFoundation\Request類,這裡列出了一些該類中的有用方法:
擷取請求URI
path方法將會返回請求的URI,因此,如果進入的請求路徑是 http://domain.com/foo/bar,則 path方法將會返回 foo/bar:
$uri=$request->path();
is方法允許你驗證進入的請求是否與給定模式比對。使用該方法時可以使用 *萬用字元:
if($request->is('admin/*')){ //} 想要擷取完整的URL,而不僅僅是路徑資訊,可以調用請求執行個體的 url或 fullUrl方法:
//不帶請求參數$url=$request->url();//帶請求參數$url = $request->fullUrl();
擷取要求方法
method方法將會返回請求的HTTP請求方式。你還可以使用 isMethod方法來驗證HTTP請求方式是否匹配給定字串:
$method=$request->method();if($request->isMethod('post')){ //} 1.2 PSR-7 請求
PSR-7標準指定了HTTP訊息介面,包括請求和響應。如果你想要擷取PSR-7請求執行個體,首先需要安裝一些庫,Lumen使用Symfony HTTP Message Bridge組件將典型的Lumen請求和響應轉化為PSR-7相容的實現:
composer require symfony/psr-http-message-bridgecomposer require zendframework/zend-diactoros
安裝完這些庫之後,你只需要在路由或控制器中通過對請求類型進行類型提示就可以擷取PSR-7請求:
use Psr\Http\Message\ServerRequestInterface;$app->get('/', function (ServerRequestInterface $request) { //}); 如果從路由或控制器返回的是PSR-7響應執行個體,則其將會自動轉化為Lumen響應執行個體並顯示出來。
2、擷取輸入
擷取輸入值
使用一些簡單的方法,就可以從 Illuminate\Http\Request執行個體中訪問使用者輸入。你不需要擔心請求所使用的HTTP要求方法,因為對所有請求方式的輸入提供者都是一致的:
$name = $request->input('name'); 你還可以傳遞一個預設值作為第二個參數給 input方法,如果請求輸入值在當前請求未出現時該值將會被返回:
$name = $request->input('name', 'Sally'); 處理表單數組輸入時,可以使用”.”來訪問數組:
$input = $request->input('products.0.name');$names = $request->input('products.*.name'); 判斷輸入值是否出現
判斷值是否在請求中出現,可以使用 has方法,如果值出現過了且不為空白, has方法返回 true:
if ($request->has('name')) { //} 擷取所有輸入資料
你還可以通過 all方法擷取所有輸入資料:
$input = $request->all();
擷取輸入的部分資料
如果你需要取出輸入資料的子集,可以使用 only或 except方法,這兩個方法都接收一個數組或動態參數列表作為唯一參數:
$input = $request->only('username', 'password');$input = $request->only('username', 'password');$input = $request->except('credit_card');$input = $request->except('credit_card'); 檔案上傳
擷取上傳的檔案
可以使用 Illuminate\Http\Request執行個體的 file方法來訪問上傳檔案,該方法返回的對象是 Symfony\Component\HttpFoundation\File\UploadedFile類的一個執行個體,該類繼承自PHP標準庫中提供與檔案互動方法的 SplFileInfo類:
$file = $request->file('photo'); 驗證檔案是否存在
使用 hasFile方法判斷檔案在請求中是否存在:
if ($request->hasFile('photo')) { //} 驗證檔案是否上傳成功
使用 isValid方法判斷檔案在上傳過程中是否出錯:
if ($request->file('photo')->isValid()){ //} 儲存上傳的檔案
使用 move方法將上傳檔案儲存到新的路徑,該方法將上傳檔案從臨時目錄(在PHP設定檔中配置)移動到指定新目錄:
$request->file('photo')->move($destinationPath);$request->file('photo')->move($destinationPath, $fileName); 其它檔案方法
UploadedFile執行個體中很有很多其它方法,查看 該類的API瞭解更多相關方法。