美文网首页
解析Symfony的HttpFoundation组件

解析Symfony的HttpFoundation组件

作者: wtzhang123 | 来源:发表于2020-06-06 11:09 被阅读0次

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

    相关文章

      网友评论

          本文标题:解析Symfony的HttpFoundation组件

          本文链接:https://www.haomeiwen.com/subject/ayottktx.html