<?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'));
}
}
在渲染时不输出全局变量(错误)。
答案 0 :(得分:0)
请务必记住,您的浏览器对视图,模板和全局变量一无所知。它看到的只是一个HTTP响应,其中包含状态码,一些标头和可选正文。
正常响应的状态码为200,正文包含浏览器应显示的内容。
Slim $response->withRedirect
方法使用状态码创建HTTP响应,告诉浏览器重定向(301、302或307)。尽管这样的响应可以包含一个主体,但是对于那些不会自动重定向的浏览器来说,它通常只是一个后备。标准的现代浏览器永远不会呈现此内容,因为一旦看到状态码,它将向响应的Location
标头中给出的URL发送新请求,并向用户显示该内容< em>而不是。
一旦用户被重定向,重定向之前就不会剩下任何上下文。浏览器已请求一个新的URL,您的应用程序将接收到该新请求并对其进行处理,而无法查看以前发生的情况。重定向之前,不会遗留任何全局变量,视图或其他任何内容。保留的唯一信息将是您明确保存到Cookie或会话(由Cookie引用)中的内容。
所有这些的最终结果是,您既不能在视图中显示某些内容,又不能在同一段代码中发出HTTP重定向。