Slim中的$ response-> withRedirect()方法不呈现中间件中创建的树枝的全局变量

时间:2018-07-22 14:02:55

标签: slim

<?php

namespace Auto\middleware;


class registrationMiddleware{
    public $container;

    public function __construct($container){
        $this->container=$container;
        // $container is the $app instance passed from the route

    }

    public function __invoke($request,$response,$next){

       $this->container->getContainer()->view->getEnvironment()->addGlobal('error','error');
      $response=$next($request,$response);
     return $response->withRedirect($this->container->getContainer()->get('router')->pathFor('redirect'));



  }
}

在渲染时不输出全局变量(错误)。

1 个答案:

答案 0 :(得分:0)

请务必记住,您的浏览器对视图,模板和全局变量一无所知。它看到的只是一个HTTP响应,其中包含状态码,一些标头和可选正文。

正常响应的状态码为200,正文包含浏览器应显示的内容。

Slim $response->withRedirect方法使用状态码创建HTTP响应,告诉浏览器重定向(301、302或307)。尽管这样的响应可以包含一个主体,但是对于那些不会自动重定向的浏览器来说,它通常只是一个后备。标准的现代浏览器永远不会呈现此内容,因为一旦看到状态码,它将向响应的Location标头中给出的URL发送新请求,并向用户显示该内容< em>而不是。

一旦用户被重定向,重定向之前就不会剩下任何上下文。浏览器已请求一个新的URL,您的应用程序将接收到该新请求并对其进行处理,而无法查看以前发生的情况。重定向之前,不会遗留任何全局变量,视图或其他任何内容。保留的唯一信息将是您明确保存到Cookie或会话(由Cookie引用)中的内容。

所有这些的最终结果是,您既不能在视图中显示某些内容,又不能在同一段代码中发出HTTP重定向。