1 <?php
2
3 4 5 6 7 8 9 10
11
12 namespace ICanBoogie\HTTP;
13
14 15 16
17 class RedirectResponse extends Response
18 {
19 20 21 22 23 24 25 26 27
28 public function __construct($url, $status = 302, array $headers = [])
29 {
30 parent::__construct
31 (
32 function(Response $response) {
33
34 $location = $response->location;
35 $title = \ICanBoogie\escape($location);
36
37 echo <<<EOT
38 <!DOCTYPE html>
39 <html>
40 <head>
41 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
42 <meta http-equiv="refresh" content="1;url={$location}" />
43
44 <title>Redirecting to {$title}</title>
45 </head>
46 <body>
47 Redirecting to <a href="{$location}">{$title}</a>.
48 </body>
49 </html>
50 EOT
51 ; // @codeCoverageIgnore
52 },
53
54 $status, [ 'Location' => $url ] + $headers
55 );
56
57 if (!$this->status->is_redirect)
58 {
59 throw new StatusCodeNotValid($this->status->code, "The HTTP status code is not a redirect: {$status}.");
60 }
61 }
62 }
63