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(); // 得到客户端接收语言数组