HTTP层 —— 请求
要通过依赖注入获取当前 HTTP 请求实例,需要在控制器的构造函数或方法中对 依赖注入 & 路由参数 如果你的控制器方法还期望获取路由参数,只需要将路由参数置于其它依赖之后即可,例如,如果你的路由定义如下:
你仍然可以对 通过路由闭包访问请求 还可以在路由闭包上类型提示 获取请求路径 获取请求URL 想要获取完整的 URL,而不仅仅是路径信息,可以使用请求实例提供的 获取请求方法 PSR-7 标准指定了 HTTP 消息接口,包括请求和响应。如果你想要获取 PSR-7 请求实例,首先需要安装一些库,Laravel 使用 Symfony HTTP Message Bridge 组件将典型的 Laravel 请求和响应转化为 兼容 PSR-7 的实现:
安装完这些库之后,你只需要在路由或控制器中通过对请求类型进行类型提示就可以获取 PSR-7 请求:
注:如果从路由或控制器返回的是 PSR-7 响应实例,则其将会自动转化为 Laravel 响应实例并显示出来。 获取所有输入值 你可以使用 获取单个输入值 使用一些简单的方法,就可以从 你还可以传递一个默认值作为第二个参数给 处理表单数组输入时,可以使用”.”来访问数组输入:
通过动态属性获取输入 此外,你也可以通过使用 使用动态属性的时候,Laravel首先会在请求中查找参数的值,如果不存在,还会到路由参数中查找。 获取JSON输入值 发送JSON请求到应用的时候,只要 获取输入的部分数据 如果你需要取出输入数据的子集,可以使用 判断输入值是否出现 判断值是否在请求中出现,可以使用 Laravel 允许你在两次请求之间保存输入数据,这个特性在检测校验数据失败后需要重新填充表单数据时很有用,但如果你使用的是 Laravel 内置的验证服务,则不需要手动使用这些方法,因为一些 Laravel 内置的校验设置会自动调用它们。 将输入存储到一次性 Session 你还可以使用 将输入存储到一次性 Session 然后重定向 如果你经常需要一次性存储输入并重定向到前一页,可以简单使用 取出上次请求数据 要从 Session 中取出上次请求的输入数据,可以使用 Request 实例的 Laravel 还提供了一个全局的辅助函数 从请求中取出Cookies Laravel 框架创建的所有 cookies 都经过加密并使用一个认证码进行签名,这意味着如果客户端修改了它们则需要对其进行有效性验证。我们使用 新增Cookie到响应 你可以使用 生成Cookie实例 如果你想要生成一个 可以使用 你可以使用 验证文件是否上传成功 使用 文件路径 & 扩展名 其他文件方法 要保存上传的文件,通常需要使用你所配置的其中一个文件系统, 如果你不想自动生成文件名,可以使用 $path = $request->photo->storeAs('images', 'filename.jpg');1、访问请求实例
Illuminate\Http\Request 类进行类型提示,这样当前请求实例会被服务容器自动注入:
<?php
namespace 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');
//
}
}
Route::put('user/{id}','UserController@update');
Illuminate\Http\Request 进行类型提示并通过如下方式定义控制器方法来访问路由参数 id :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
classUser Controller extends Controller
{
/**
* 更新指定用户
*
* @param Request $request
* @param int $id
* @return Response
*/
public function update(Request $request,$id)
{
//
}
}
Illuminate\Http\Request 类,在执行的时候服务容器会自动注入输入的请求到闭包:
use Illuminate\Http\Request;
Route::get('/', function (Request $request) {
//
});
请求路径 & 方法
Illuminate\Http\Request 实例提供了多个方法来检测应用的 HTTP 请求,Laravel 的 Illuminate\Http\Request 继承自 Symfony\Component\HttpFoundation\Request 类,下面演示了该类提供的一些有用方法:path 方法将会返回请求的路径信息,因此,如果进入的请求路径是 http://domain.com/foo/bar,则 path 方法将会返回 foo/bar:
$uri=$request->path();
is 方法允许你验证进入的请求是否与给定模式匹配。使用该方法时可以使用 * 通配符:
if($request->is('admin/*')){
//
}
url 或 fullUrl 方法, url 方法将会返回不带查询字符串的URL,而 fullUrl 方法返回结果则包含查询字符串:
//不包含查询字符串
$url=$request->url();
//包含查询字符串
$url = $request->fullUrl();
method 方法将会返回 HTTP 请求方式。你还可以使用 isMethod 方法来验证 HTTP 请求方式是否匹配给定字符串:
$method=$request->method();
if($request->isMethod('post')){
//
}
PSR-7 请求
composer require symfony/psr-http-message-bridge
composer require zendframework/zend-diactoros
use Psr\Http\Message\ServerRequestInterface;
Route::get('/', function (ServerRequestInterface $request) {
//
});
2、获取请求输入
all 方法以数组格式获取所有输入值:
$input = $request->all();
Illuminate\Http\Request 实例中访问用户输入。你不需要关心请求所使用的 HTTP 请求方法,因为对所有请求方式的输入都是通过 input 方法获取用户输入:
$name = $request->input('name');
input 方法,如果请求输入值在当前请求未出现时该值将会被返回:
$name = $request->input('name', 'Sally');
$input = $request->input('products.0.name');
$names = $request->input('products.*.name');
Illuminate\Http\Request 实例上的动态属性来访问用户输入。例如,如果你的应用表单包含 name 字段,那么可以像这样访问提交的值:
$name = $request->name;
Content-Type 请求头被设置为 application/json ,都可以通过 input 方法获取JSON数据,还可以通过“.”号解析数组:
$name = $request->input('user.name');
only 或 except 方法,这两个方法都接收一个数组或动态列表作为唯一参数:
$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');
has 方法,如果值出现过了且不为空,has 方法返回 true:
if ($request->has('name')) {
//
}
上一次请求输入
Illuminate\Http\Request 实例的 flash 方法会将当前输入存放到一次性 Session(所谓的一次性指的是从 Session 中取出数据中,对应数据会从 Session 中销毁)中,这样在下一次请求时数据依然有效:
$request->flash();
flashOnly 和 flashExcept 方法将输入数据子集存放到 Session 中,这些方法在session之外保存敏感信息时很有用:
$request->flashOnly('username', 'email');
$request->flashExcept('password');
withInput 方法来将输入数据链接到 redirect 后面:
return redirect('form')->withInput();
return redirect('form')->withInput($request->except('password'));
old 方法。old 方法提供了便利的方式从 Session 中取出一次性数据:
$username = $request->old('username');
old,如果你是在 Blade 模板中显示上次输入数据,使用辅助函数 old 更方便,如果给定参数没有对应输入,返回 null:
<input type="text" name="username" value="{{ old('username') }}">
Cookies
Illuminate\Http\Request 实例的 cookie 方法从请求中获取 cookie 的值:
$value = $request->cookie('name');
cookie 方法将一个cookie附加到输出的 Illuminate\Http\Response 实例,你需要传递名称、值、以及cookie有效期(分钟)到这个方法:
return response('Hello World')->cookie(
'name', 'value', $minutes
);
cookie 方法可以接收一些使用频率较低的参数,一般来说,这些参数和PHP原生函数setcookie作用和意义一致:
return response('Hello World')->cookie(
'name', 'value', $minutes, $path, $domain, $secure, $httpOnly
);
Symfony\Component\HttpFoundation\Cookie 实例以便后续附加到响应实例,可以使用一个全局的辅助函数cookie,这个cookie只有在附加到响应实例上才会发送到客户端:
$cookie = cookie('name', 'value', $minutes);
return response('Hello World')->cookie($cookie);
3、文件上传
获取上传的文件
Illuminate\Http\Request 实例提供的 file 方法或者动态属性来访问上传文件, file 方法返回 Illuminate\Http\UploadedFile 类的一个实例,该类继承自 PHP 标准库中提供与文件交互方法的 SplFileInfo 类:
$file = $request->file('photo');
$file = $request->photo;
hasFile 方法判断文件在请求中是否存在:
if ($request->hasFile('photo')) {
//
}
isValid 方法判断文件在上传过程中是否出错:
if ($request->file('photo')->isValid()){
//
}
UploadedFile 类还提供了访问上传文件绝对路径和扩展名的方法。 extension 方法可以基于文件内容判断文件扩展名,该扩展名可能会和客户端提供的扩展名不一致:
$path = $request->photo->path();
$extension = $request->photo->extension();
UploadedFile 实例上还有很多其他可用方法,查看该类的API文档了解更多信息。保存上传的文件
UploadedFile 类有一个 store 方法,该方法会将上传文件移动到相应的磁盘路径上,该路径可以是本地文件系统的某个位置,也可以是云存储(如Amazon S3)上的路径。store 方法接收一个文件保存的相对路径(相对于文件系统配置的根目录 ),该路径不应该包含文件名,因为文件名会通过对文件内容进行md5自动生成。store 方法还接收一个可选的参数——用于存储文件的磁盘名称作为第二个参数,该方法会方返回相对于根目录的文件路径:
$path = $request->photo->store('images');
$path = $request->photo->store('images', 's3');
storeAs 方法,该方法接收保存路径、文件名和磁盘名作为参数:
$path = $request->photo->storeAs('images', 'filename.jpg', 's3');
HTTP层 —— 请求的更多相关文章
- 从点击到呈现 — 详解一次HTTP请求
一般来说,很多的参考资料上面都会说,http 是一个基于请求/响应的工作模式,然后画出一张浏览器和服务器的 b/s 结构图,再画上两个箭头,表示请求和响应,应该说这么解释是易懂的,一般也是够清楚的,但 ...
- Linux3.10.0块IO子系统流程(4)-- 为请求构造SCSI命令
首先来看scsi_prep_fn int scsi_prep_fn(struct request_queue *q, struct request *req) { struct scsi_device ...
- JAVAEE——宜立方商城11:sso登录注册功能实现、通过token获得用户信息、Ajax跨域请求(jsonp)
1. 学习计划 第十一天: 1.sso注册功能实现 2.sso登录功能实现 3.通过token获得用户信息 4.Ajax跨域请求(jsonp) 2. Sso系统工程搭建 需要创建一个sso服务工程,可 ...
- ZigBee PHY层
1. 介绍 ZigBee PHY层,即IEEE 802.15.4 PHY层,这里主要介绍了802.15.4-2003版本 PHY主要实现了如下功能 - 启动和关闭RF收发器 - 信道能量检测(Chan ...
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片 ...
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 用backbone实现的一个MVC的小demo
一.Apache配置 本实例需要使用php支持.要现在Apache中配置虚拟目录,在Apache下的httpd-vhosts.conf文件中添加如下代码 <VirtualHost *:80> ...
- MVP模式(Android)
以前在写项目的时候,没有过多考虑架构模式的问题,因为之前一直做J2EE开发,而J2EE都是采用MVC模式进行开发的,所以在搭建公司项目的时候,也是使用类似MVC的架构(严格来讲,之前的项目还算不上MV ...
- 第一章,阿里的Dubbo完美初级搭建,待续。。。
1.1 后台工程搭建分析 Web工程. Maven的常见打包方式:jar.war.pom Pom工程一般都是父工程,管理jar包的版本.maven插件的版本.统一的依赖管理.聚合工程. Taotao- ...
随机推荐
- NOIP2010 机器翻译
1机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单 ...
- Java中finalize方法用途何在?
package thinking.in.java.demo; /* * finalize的用途何在? * *本例的终止条件是L所有的Book对象在被当做垃圾回收前都应该被签入.但是在main方法中 * ...
- Linux Pmap 命令:查看进程用了多少内存
Pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态.其报告进程的地址空间和内存状态信息.Pmap实际上是一个Sun OS上的命令,linux仅支持其有限的功能.但是它还是对查 ...
- ORA-01078, LRM-00123错误处理
创建spfile时, 或者在nomount时, 出现下面的问题: SQL> create spfile from pfile; create spfile from pfile * ERROR ...
- .NET设计模式(3):抽象工厂模式(Abstract Factory)
):抽象工厂模式(Abstract Factory) 抽象工厂模式(Abstract Factory) --探索设计模式系列之三 Terrylee,2005年12月12日 转载:http://terr ...
- Cookie与Session的初探
1.Cookie 2.Session 每当一个新的请求来时,asp.net会根据浏览器有没传来SessionId(一般用Cookie传过来的,也可以用url传),来判断是新创建一个session还是根 ...
- 【Away3D代码解读】其它一些的记录(持续更新)
查看当前正在使用的AGAL代码可以在程序开始时添加下面的代码,AGAL代码会被trace出来: Debug.active = true; 具体的输出是在MaterialPassBase类的update ...
- C#学习笔记——面向对象、面向组件以及类型基础
C#学习笔记——面向对象.面向组件以及类型基础 目录 一 面向对象与面向组件 二 基元类型与 new 操作 三 值类型与引用类型 四 类型转换 五 相等性与同一性 六 对象哈希码 一 面向对象与面向组 ...
- java 学习基础学习单词及java关键词
在JAVA学习中我们难免会犯一些逻辑错误,语法错误,和一些运行错误,对于英语不好的人,就的记下下面的2常用单词,有助于我们提高在使用软件编写代码的速度和代码调试,能更便捷的找出错误,知道1中的保溜关键 ...
- ThinkPHP CURD方法盘点:data方法
data方法也是模型类的连贯操作方法之一,用于设置当前要操作的数据对象的值,可能大家不太习惯用这个方法,今天来讲解下如何用好data方法. 用法 写操作 通常情况下我们都是通过create方法或者赋值 ...