获取请求#

要通过依赖注入的方式来获取当前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请求#的更多相关文章

  1. [转]Laravel 4之请求

    Laravel 4之请求 http://dingjiannan.com/2013/laravel-request/ 获取请求数据 获取当前请求所包括的所有GET和POST数据 Route::get(' ...

  2. Laravel 5.x 请求的生命周期(附源码)

    Laravel最早接触是刚开始实习的时候,那时通过网上的学习资料很快便上手,开发模块接口.后来没有什么深入和总结,但是当我刚开始学Laravel的时候,我对Laravel最大的认识就是,框架除了路由. ...

  3. Laravel 处理 Options 请求的原理以及批处理方案

    0. 背景 在前后端分离的应用中,需要使用CORS完成跨域访问.在CORS中发送非简单请求时,前端会发一个请求方式为OPTIONS的预请求,前端只有收到服务器对这个OPTIONS请求的正确响应,才会发 ...

  4. Laravel学习:请求到响应的生命周期

    Laravel请求到响应的整个执行过程,主要可以归纳为四个阶段,即程序启动准备阶段.请求实例化阶段.请求处理阶段.响应发送和程序终止阶段. 程序启动准备阶段 服务容器实例化 服务容器的实例化和基本注册 ...

  5. Laravel提交POST请求报错

    提交POST请求出现如下错误: The page has expired due to inactivity Please refresh and try again 这是由于在Laravel框架中有 ...

  6. laravel判断HTTP请求是否ajax

    if(Request->ajax()){ echo "AJAX"; }else{ echo '普通请求':}

  7. laravel 默认所有请求带session解决办法

    laravel  app/Http/Kernel.php protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\Encr ...

  8. 使用Laravel提交POST请求出现The page has expired due to inactivity错误

    任何指向 web 中 POST, PUT 或 DELETE 路由的 HTML 表单请求都应该包含一个 CSRF 令牌(CSRF token),否则,这个请求将会被拒绝.

  9. laravel 对于ajax请求返回的数据

    ajax在调试器中的位置  XHR 代表 XMlHTTPREQUET 一般ajax请求php的时候我们需要给返回什么数据呢? 一般我都是直接renturn 数组的 其实也没啥问题 但是还是感觉第三种写 ...

随机推荐

  1. 【笔记】LR响应时间

    事务:是指在客户端做一种或多种的业务所需要的操作集. 事务响应时间:是通过记录用户请求的开始时间和服务器返回内容到客户时间的差值来计算用户响应时间. 响应时间是服务器返回和用户请求之间的时间差,那么得 ...

  2. 20190927 - 28 后觉 「雅礼Day3 - 4」

    我再不开$C++11$编译我就从三楼跳下去$$\text{%%%lsc}$$ Day3 -lm -O2 -std=c++ Before $Day3$? 全是$Subtask$? $\frac{1}{4 ...

  3. Sessions 与Cookies详解

     一.Cookie 是什么? HTTP协议是无状态的,每一次数据交换完毕就结束,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链接.例如:我逛淘宝买东西,我看上了易宝棒棒糖,而我下单的时候 ...

  4. php数字转人民币金额大写

    numToRmb.php <?php header("content-type:text/html;charset=utf-8"); function numToRmb($n ...

  5. CF1132G

    听说,一个好的Oier都是题目喂出来的. 题目 定义一个序列的最长贪心严格上升子序列为:若选出的子序列为 \(a\),对于其中相邻两项 \(i,j\),不存在 b\(i<k<j\),满足在 ...

  6. js实现使用递归来计算1~任意数字的和

    function getSum(n){ if(n==1){ return 1; } return n+getSum(n-1); } var res = getSum(100); console.log ...

  7. RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占优势

    美国时间3月4-8日,国际知名信息安全峰会RSA Conference在美国旧金山开幕,云安全及云可以为企业提供更可靠的资产管理方式成为大会热点. 此次峰会共吸引全球700多家机构参展,其中近42%为 ...

  8. hdu 1358 Period(KMP入门题)

    Period Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  9. oracle 写存储过程有返回值时 注意在loop循环处添加返回值:=

    例子: create or replace procedure p_xl is v_count NUMBER(10); begin for rs in(select yhbh from dbyh) l ...

  10. Linux 上GCC的静态编译和动态编译

    静态编译 常规编译示例: $gcc xxx.c yyy.c zzz.c -o rslt 注明: gcc编译器会对源文件min.c进行预处理, 编译, 以及链接, 最后生成可执行文件 $gcc -c x ...