基于laravel Request的所有方法详解


Posted in PHP onSeptember 29, 2019

获取请求的实例

通过 Facade

Request 这个 facade 可以让我们得到绑定在容器里的当前这个请求。比如:

$name = Request::input('name');

注意,如果你在一个命名空间里,你需要在类文件的顶部使用 use Request; 这条声明来导入 Request 这个 facade 。

通过依赖注入

要通过依赖注入得到当前 HTTP 请求的实例,需要在你的控制器构造函数或者方法里 type-hint 类。当前请求的这个实例会被 Service Container 自动注入进来。

<?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');

    //
  }

}

如果你的控制器方法期待来自路由参数上的 input(值),可以在其它的依赖的后面列出这些路由参数:

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class UserController extends Controller {

  /**
   * Store a new user.
   *
   * @param Request $request
   * @param int $id
   * @return Response
   */
  public function update(Request $request, $id)
  {
    //
  }

}

检索输入

检索输入的值

使用几个简单的方法,你可以得到在 Illuminate\Http\Request 实例上的用户的所有的输入。你不用管请求使用的 HTTP 动作是什么,可以使用同样的方法来得到所有的输入的值。

$name = Request::input('name');

在缺少输入值的时候去获取到默认值

$name = Request::input('name', 'Sally');

确定一个输入值是否出现

if (Request::has('name'))
{
  //
}

得到请求里的所有输入的值

$input = Request::all();

得到请求里的部分输入值

$input = Request::only('username', 'password');
 
$input = Request::except('credit_card');

如果输入里面包含数组类型的值,可以使用点的形式访问到这个数组里的值:

$input = Request::input('products.0.name');

以前输入的值

Laravel 会存储在一次请求与下一次请求之间的输入值。比如,你可能需要在验证了输入错误之后重新填写表单。

把输入值闪存到会话里

flash 方法可以把当前的输入的值闪存(flash)到会话( session) 里。这样,在用户下一次对应用发出请求的时候可以用到这些输入值:

Request::flash();

把一部分输入值闪存到会话里

Request::flashOnly('username', 'email');
 
Request::flashExcept('password');

闪存与重定向

你想闪存输入值并且用一个重定向(redirect)到前一个页面上,可以把输入闪存链到一个重定向上。

return redirect('form')->withInput();
 
return redirect('form')->withInput(Request::except('password'));

得到以前的数据

得到前一个请求里的闪存的输入值,可以使用在 Request 实例上的 old 这个方法。

$username = Request::old('username');

如果你打算用 Blade 模板显示以前的输入值,可以使用 old 这个帮手:

{{ old('username') }}

Cookies

Laravel 框架创建的所有的 Cookies 都是加密的,并且会签上一个认证的代码,意思就是如果这些 Cookies 在客户端那里被修改过,就会被认为是无效的 Cookies。

检索 Cookie 值

$value = Request::cookie('name');

把一个新 Cookie 附加给一个响应

cookie 这个帮手的作用就是去生成新的 Symfony\Component\HttpFoundation\Cookie 实例。可以使用 withCookie 方法把Cookies 附加到 Response 实例上:

$response = new Illuminate\Http\Response('Hello World');
 
$response->withCookie(cookie('name', 'value', $minutes));

创建永恒的 Cookie

永恒,我们的意思其实就是 5 年。

$response->withCookie(cookie()->forever('name', 'value'));

文件

检索一个上传了的文件

$file = Request::file('photo');

确定一个文件是不是被上传了

if (Request::hasFile('photo'))
{
  //
}

file 方法返回来的对象是 Symfony\Component\HttpFoundation\File\UploadedFile 类的一个实例,这个类继承了 PHP 的 SplFileInfo 类,提供了很多方法可以跟文件交互。

确定上传的文件是否有效

if (Request::file('photo')->isValid())
{
  //
}

移动一个上传的文件

Request::file('photo')->move($destinationPath);
 
Request::file('photo')->move($destinationPath, $fileName);

其它文件方法

在 UploadedFile 实例上还有一些其它的方法。具体可以看一下 Class API 的文档 。

其它的请求信息

Request 类为你的应用提供了很多方法可以检查 HTTP 请求,它继承了 Symfony\Component\HttpFoundation\Request 类。下面是几个亮点。

检索请求 URI

$uri = Request::path();

检索请求方法

$method = Request::method();
 
if (Request::isMethod('post'))
{
  //
}

确定请求路径是否匹配一个模式

if (Request::is('admin/*'))
{
  //
}

得到当前请求的地址

$url = Request::url();

以上这篇基于laravel Request的所有方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
怎样在php中使用PDF文档功能
Oct 09 PHP
php a simple smtp class
Nov 26 PHP
PHP isset()与empty()的使用区别详解
Aug 29 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
php使用curl访问https示例分享
Jan 17 PHP
PHP6新特性分析
Mar 03 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
php慢查询日志和错误日志使用详解
Feb 27 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 #PHP
php实现对文件压缩简单的方法
Sep 29 #PHP
Laravel 添加多语言提示信息的方法
Sep 29 #PHP
php实现登录页面的简单实例
Sep 29 #PHP
php实现推荐功能的简单实例
Sep 29 #PHP
php实现分页功能的详细实例方法
Sep 29 #PHP
laravel实现于语言包的完美切换方法
Sep 29 #PHP
You might like
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
2019/05/28 PHP
5 cool javascript apps
2007/03/24 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
详解javascript遍历方式
2015/11/11 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
Django中使用locals()函数的技巧
2015/07/16 Python
Python reduce()函数的用法小结
2017/11/15 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
青年志愿者事迹材料
2014/02/07 职场文书
安全生产实施方案
2014/02/23 职场文书
2014年党小组工作总结
2014/12/20 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL