解析Symfony的HttpFoundation组件

1.概述

在PHP中,我们通常使用$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION等全局变量来读取HTTP请求内容,如下:

$name = $_GET['name'];
echo $name;

这样子会出现很多问题,如果 URL 里面没有 GET 参数,PHP 会抛出一个警告,再或者没有处理xss攻击,形如
http://www.test.com/index.php?name=<script>alert(123);</script>
针对如上问题我们进行改进,

$name=$_GET['name']??'xiaoming';
echo htmlspecialchars($name);

单个变量这样做也还可以,一旦变量很多了呢?我们不可能一个个的这样转换吧,如果我们的项目再大一些,我们还会发现更多的问题

2.初识HttpFoundation

首先composer安装HttpFoundation

composer require symfony/http-foundation

基本用法

<?php
require_once __DIR__.'/../vendor/autoload.php';

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

$request = Request::createFromGlobals();
$name=$request->get('name','默认值');

现在我们就可以面向对象的方式,优雅的获得请求参数了,Request对象的功能可不止这么点,你能想到的都帮你做了

<?php
require_once __DIR__.'/../vendor/autoload.php';

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

// 请求的URI (e.g. /about)
$request->getPathInfo();

// 分别得到GET参数或POST参数
$request->query->get('foo'); // GET
$request->request->get('bar', '默认值'); // POST

// 得到服务器变量
$request->server->get('HTTP_HOST');

// 得到上传文件对象
$request->files->get('foo');

// 得到cookie值
$request->cookies->get('PHPSESSID');

// 得到http请求头信息
$request->headers->get('host');
$request->headers->get('content_type');

$request->getMethod();    // GET, POST, PUT, DELETE, HEAD
$request->getLanguages(); // 得到客户端接收语言数组
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容