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- ...
随机推荐
- POM详细配置
POM的全称是“ProjectObjectModel(项目对象模型)”. pom.xml详解 声明规范 <projectxmlns="http://maven.apache.org/P ...
- IComparer接口与
IComparable比较接口,继承此接口可对lis<T>调用sort进行排序 或者调用sort时可以为sort方法提供继承了IComparer的比较器
- 不适用临时空间,交换变量a和b
方法1: a = a + b; b = a - b; a = a - b; 方法2: a ^= b; b ^= a; a ^= b; 方法3: a = a * b; b = a / b; a = a ...
- TCP/IP 相关总结
1. 三次握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等 ...
- Asp.Net底层解析
写的很好的一篇文章,但由于不能转载 所以把链接发在这里,以方便自己以后看 http://blog.csdn.net/mlcactus/article/details/8564347 http://ji ...
- 转载StringBuilder说明
动态串StringBuilder 利用System.Text.StringBuilder类实现动态字符串,动态的含义是指在修改字符串时,系统不需要创建新的对象,不会重复开辟新的内存空间,而是直接在原来 ...
- 【Stage3D学习笔记续】山寨Starling(一):从事件说起
我在GitHub上新开了一个项目:https://github.com/hammerc/hammerc-study-Stage3D 山寨的Starling版本我取名叫做Scorpio2D,以后的笔记中 ...
- 理解js中的原型链,prototype与__proto__的关系
说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...
- Spring ProxyFactory
ProxyFactory 是 Spring AOP的实现方式之一.下面介绍下ProxyFactory的用法. 1.接口定义 public interface UserReadService { pub ...
- DataGridView单元格显示GIF图片
本文转载:http://home.cnblogs.com/group/topic/40730.html DataGridView单元格显示GIF图片 gifanimationindatagrid.ra ...