[ Lumen 5.2 文档 ] 基础 -- HTTP 请求
1、访问请求实例
通过依赖注入获取当前HTTP请求实例,应该在控制器的构造函数或方法中对 Illuminate\Http\Request类进行类型提示,当前请求实例会被服务容器自动注入:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use Illuminate\Routing\Controller;class UserController extends Controller{ /** * 存储新用户 * * @param Request $request * @return Response */ public function store(Request $request) { $name=$request->input('name'); // }}
如果你的控制器方法还期望获取路由参数输入,只需要将路由参数置于其它依赖之后即可,例如,如果你的路由定义如下:
$app->put('user/{id}','UserController@update');
你仍然可以对 Illuminate\Http\Request进行类型提示并通过如下方式定义控制器方法来访问路由参数:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request;use Illuminate\Routing\Controller;classUser Controller extends Controller{ /** * 更新指定用户 * * @param Request $request * @param int $id * @return Response */ public function update(Request $request,$id) { // }}
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了解更多相关方法。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...
