Laravel 的HTTP请求#
获取请求#
要通过依赖注入的方式来获取当前HTTP请求的实例,你应该在控制器方法中类型提示Illuminate\Http\Request
传入的请求的实例通过 服务容器自动注入:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
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\Controller;
use Illuminate\Http\Request;
class UserController extends Controller
{
/*
更新指定的用户
@param Request $request
@param string $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请求,并继承了
Symfony\Component\HttpFoundation\Request 类。下面是该类几个有用的方法:
获取请求路径#
path 方法返回请求的路径信息。也就是说,如果传入的请求的目标地址是 http://domain.com/foo/bar 那么path 将
返回 foo/bar;
$uri = $request->path();
is 方法可以验证传入的请求路径和指定规则是否匹配。使用这个方法时,你也可以传递一个*字符作为通配符:
if ($request->is('admin/*')){}
获取请求的URL#
你可以使用url 或者fullUrl方法去获取传入请求的完整URL,url方法返回不带有查询字符串的URL,而fullUrl方法的返回值
包含查询字符串:
//WIthout Query String ...
$url = $request->url();
//With Query String ...
$url = $request->fullUrl();
获取请求方法#
对于传入的请求method方法将返回HTTP的请求方式。你也可以使用isMethod 方法去验证HTTP的请求方式于指定
规则是否相配:
$method = $request->mothod();
if($request->isMethod('post')){}
输入预处理&规范化#
默认情况下,Laravel在应用程序的全局中间件堆栈中包含了TrimStrings 和 ConvertEmptyStringsToNull 两个中间件。
这些中间件由App\Http|Kernel 类列在堆栈中。他们会自动处理请求上所有传入的字符串字段,并将空的字符串
字段转变为null值。这样你就不用再担心路由和控制器中数据规范化的问题。
如果你想停用这些功能,可以从应用程序的中间件堆栈中删除这两个中间件,只需在App\Http\Kernel类的
$middleware 属性中移除他们。
获取输入#
获取所有输入数据#
你可以使用all 方法以 数组 形式获取到所有输入数据:
$intput = $request->all();
获取指定输入值#
使用几种简单的方法(不需要特别指定那个HTTP动作),就可以访问Illuminate\Http\Request 实例中所有的用户输入,
也就是说无论是什么样的HTTP动作,input方法都可以被用来获取用户输入数据:
$name = $request->input('name');
你可以给input 方法的第二个参数传入一个默认值。如果请求的输入值不存在请求上,就返回默认值:
$name = $request->input('name','Sally');
如果传输表单数据中包含[数组]形式的数据,那么可以使用[点]语法来获取数组:
$name = $request->input('prodects.0.name');
$names = $request->input('products.*.name');
从查询字符串获取输入#
使用input 方法可以从整个请求中获取输入数据(包括查询字符串),而 query 方法可以只从查询字符串中获取输入数据
$name = $request->query('name');
如果请求的查询字符串收不存在,则将返回这个方法的第二个参数:
$name = $request->query('name','Helen');
你可以不提供参数调用query方法来以关联数组的行还是检索所有查询字符串值:
$query = $request->query();
通过动态属性获取输入#
你也可以通过Illuminate\Http\Request 实例的动态属性来获取用户输入。例如,如果你应用的表单中包含name字段,
那么可以向这样访问该字段的值:
$name = $request->name;
Laravel 在处理动态属性的优先级是,先在请求的数据中查找,如果没有,再到路由参数汇总查找。
获取JSON输入信息#
如果发送到应用程序的请求数据是json,只要请求的Content-Type 标头正确设置为 application/json 就可以通过Input 方法
访问JSON数据,你甚至可以使用[点]语法来读取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');
only 方法会返回所有你指定的键值对,但不会返回请求汇总不存在的键值对。
确定是否存在输入值#
要判断请求是否存在某个值,可以使用has方法。如果请求汇总存在该值,has方法就会返回true;
if($request->has('name'))
{
}
当提供一个数组作为参数时,has方法将确定是否存在数据中所有给定的值:
if($request->has(['name','email']))
{
//
}
如果你想确定请求是否存在值并且不为空,可以使用filled方法;
if($request->filled('name'))
{
//
}
Laravel 的HTTP请求#的更多相关文章
- [转]Laravel 4之请求
Laravel 4之请求 http://dingjiannan.com/2013/laravel-request/ 获取请求数据 获取当前请求所包括的所有GET和POST数据 Route::get(' ...
- Laravel 5.x 请求的生命周期(附源码)
Laravel最早接触是刚开始实习的时候,那时通过网上的学习资料很快便上手,开发模块接口.后来没有什么深入和总结,但是当我刚开始学Laravel的时候,我对Laravel最大的认识就是,框架除了路由. ...
- Laravel 处理 Options 请求的原理以及批处理方案
0. 背景 在前后端分离的应用中,需要使用CORS完成跨域访问.在CORS中发送非简单请求时,前端会发一个请求方式为OPTIONS的预请求,前端只有收到服务器对这个OPTIONS请求的正确响应,才会发 ...
- Laravel学习:请求到响应的生命周期
Laravel请求到响应的整个执行过程,主要可以归纳为四个阶段,即程序启动准备阶段.请求实例化阶段.请求处理阶段.响应发送和程序终止阶段. 程序启动准备阶段 服务容器实例化 服务容器的实例化和基本注册 ...
- Laravel提交POST请求报错
提交POST请求出现如下错误: The page has expired due to inactivity Please refresh and try again 这是由于在Laravel框架中有 ...
- laravel判断HTTP请求是否ajax
if(Request->ajax()){ echo "AJAX"; }else{ echo '普通请求':}
- laravel 默认所有请求带session解决办法
laravel app/Http/Kernel.php protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\Encr ...
- 使用Laravel提交POST请求出现The page has expired due to inactivity错误
任何指向 web 中 POST, PUT 或 DELETE 路由的 HTML 表单请求都应该包含一个 CSRF 令牌(CSRF token),否则,这个请求将会被拒绝.
- laravel 对于ajax请求返回的数据
ajax在调试器中的位置 XHR 代表 XMlHTTPREQUET 一般ajax请求php的时候我们需要给返回什么数据呢? 一般我都是直接renturn 数组的 其实也没啥问题 但是还是感觉第三种写 ...
随机推荐
- canvas用2d渲染出3d的感觉
好久没有写博客了,深究动画其实也就是setTimeout setInterval requestAnimationFrame很多人可能不熟悉requestAnimationFrame但是事实上和set ...
- 读书笔记--iBATIS in Action 目录
1.iBATIS的理念 2.iBATIS是什么 3.安装和配置iBATIS 4.使用以映射语句 5.执行非查询语句 6.使用高级查询技术 7.事务 8.使用动态SQL 9.使用高速缓存提高性能 10. ...
- spring boot指定外部配置的坑
外部配置文件所在目录path/to/dir 指定--spring.config.location=path/to/dir 项目启动,没有使用任何配置文件,项目外和jar包中的都没有使用 这是因为其把p ...
- HTML 页面间传值(包含中文)
A页面——>B页面 A页面 $('.edit-bottom').click(function () { var word1=$('#word').val();//需要传到B页面的值 var ur ...
- VC开发多语言界面 多种方法(非常easy) 有源代码
源代码地址(专业定制程序:MCU,Windows,Android .VC串口,Android蓝牙等不限.) (需源代码先留邮箱)先上图 1.通过遍历 得到全部控件ID号与TEXT,得到一个中文语言配置 ...
- linux目录结构详细说明
Linux各目录及每个目录的详细介绍 [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所 ...
- 洛谷P1314 [NOIP2011提高组Day2T2] 聪明的质监员
P1314 聪明的质监员 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: ...
- 洛谷P1080 [NOIP2012提高组D1T2]国王游戏 [2017年5月计划 清北学堂51精英班Day1]
P1080 国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 ...
- 如何用git将项目代码上传到github - CSDN博客
配置Git 我们先在电脑硬盘里找一块地方存放本地仓库,比如我们把本地仓库建立在C:\MyRepository\1ke_test文件夹下 进入1ke_test文件夹 鼠标右键操作如下步骤: 1)在本地仓 ...
- JS 获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...