云客Drupal源码分析之请求对象Request及请求堆栈

    xiaoxiao2022-06-30  95

    drupal是建立在Symfony组件之上,Symfony认为网站系统无非就是一个将请求转化为响应的系统,并以此设计执行流程,drupal也是如此,所以整个系统运行之初就是建立请求对象,这个对象将贯穿整个程序,被各个模块访问。

    建立请求对象也是为适应面向对象开发方式,这个对象将把以前面向过程式程序设计经常使用的系统输入、环境变量、cookies、session等等数据封装起来,后续程序仅仅面对该对象即可,非常简洁,如无必要,不应该直接去操作$_POST、$_GET、$_COOKIE等等全局内容。为了方便使用请求对象也加入了一些额外的功能,比如可以添加自定义属性,这样模块间可以很方便的共享一些数据,它就像一艘船,顺流而下,可以带上你给的数据被沿途的处理节点看到。

    一个根据外部输入产生的请求对象,系统根据它产生响应对象,响应可能包含很多块内容,为了产生每一块内容,在内部可以建立很多子请求对象,相对的由外部输入产生的请求对象称为主请求对象,主请求和子请求被放入请求堆栈中管理。

    drupal不经修改的完全使用了Symfony的请求组件,请求对象的类定义位于:\vendor\symfony\http-foundation\Request.php

    下面来看看这个请求对象:

    产生主请求:

    $request = Request::createFromGlobals();

    这将把$_GET, $_POST,  $_COOKIE, $_FILES, $_SERVER数据全部封装到请求对象$request中,Request类允许自定义一个工厂去产生Request对象,工厂产生的对象必须是Request的实例。工厂是一个回调,先需要设置到Request中,如下:

    Request::setFactory($callable); $request = Request::createFromGlobals();

    这允许你对基本的请求对象进行扩展,对产生的请求对象添加一些额外数据等等。

    在工厂里可以实例化一个继承了Request类的类,极大的增加了灵活性。

    在Reques中还提供了静态方法:Reques::create($uri, $method = 'GET', $parameters = array(), $cookies = array(), $files = array(), $server = array(), $content = null)用以根据自定义的uri产生一个子请求。

    Reques提供了操作session的能力,注入一个实现了Symfony\Component\HttpFoundation\Session\SessionInterface接口的session对象即可:

     

    <pre name="code" class="php">$request->setSession(SessionInterface $session);

     

     

     

     

     

    对$_GET, $_POST,  $_COOKIE内容的访问全部通过参数包对象进行访问

    \vendor\symfony\http-foundation\ParameterBag.php

    上传的文件通过FileBag对象访问,服务器环境数据通过ServerBag对象访问,获得的http头数据通过HeaderBag对象访问

    一系列的get方法可以得到常用的一些数据

    请求堆栈:

    在系统运行中通过请求堆栈对象访问请求对象,请求堆栈对象定义了一个关于请求对象的堆栈数据结构(先进后出),在内部它是通过php数组实现,保存了各个请求对象,最底层是主请求。

    请求堆栈对象很简单,请看类定义\vendor\symfony\http-foundation\RequestStack.php

     

    我是云客,【云游天下,做客四方】,联系方式见主页,欢迎转载,但须注明出处

    time:20160914 

     

     

    转载请注明原文地址: https://ju.6miu.com/read-1126230.html

    最新回复(0)