Skip to content

Commit 568e018

Browse files
Базовая реализация компонента
1 parent fbc37eb commit 568e018

File tree

2 files changed

+197
-0
lines changed

2 files changed

+197
-0
lines changed

Headers.php

+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
<?php
2+
3+
declare(strict_types = 1);
4+
5+
/**
6+
* Класс Headers
7+
*
8+
* Реализует управление заголовками запроса
9+
*/
10+
class Headers implements HeadersInterface {
11+
12+
/**
13+
* @var array Заголовки
14+
*/
15+
private array $headers;
16+
17+
public function __construct()
18+
{
19+
$this->headers = $this->getAllHeaders();
20+
}
21+
22+
/**
23+
* Получает все заголовки методами apache и nginx
24+
*
25+
* @return array
26+
*/
27+
private function getAllHeaders(): array
28+
{
29+
if (!function_exists('getallheaders'))
30+
{
31+
if (!is_array($_SERVER))
32+
{
33+
return [];
34+
}
35+
36+
$headers = [];
37+
38+
foreach ($_SERVER as $name => $value)
39+
{
40+
if (strpos($name, 'HTTP_') === 0)
41+
{
42+
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
43+
}
44+
}
45+
46+
return $headers;
47+
}
48+
49+
return getallheaders() !== false ? getallheaders() : [];
50+
}
51+
52+
/**
53+
* @inheritDoc
54+
*/
55+
public function set(array $params): void {
56+
$this->getAll();
57+
58+
foreach ($params as $header => $value)
59+
{
60+
$this->headers[$header] = $value;
61+
}
62+
63+
$this->add($params);
64+
}
65+
66+
/**
67+
* @inheritDoc
68+
*/
69+
public function add(array $params): void {
70+
foreach ($params as $header => $value)
71+
{
72+
$headerExists = array_key_exists($header, $this->headers);
73+
$this->headers[$header] = $value;
74+
75+
header("{$header}: {$value}", $headerExists);
76+
}
77+
}
78+
79+
/**
80+
* @inheritDoc
81+
*/
82+
public function remove(string $key): void {
83+
$this->getAll();
84+
85+
unset($this->headers[$key]);
86+
header_remove($key);
87+
}
88+
89+
/**
90+
* @inheritDoc
91+
*/
92+
public function removeAll(): void {
93+
$this->headers = [];
94+
header_remove();
95+
}
96+
97+
/**
98+
* @inheritDoc
99+
*/
100+
public function has(string $key): bool {
101+
$this->getAll();
102+
103+
return isset($this->headers[$key]);
104+
}
105+
106+
/**
107+
* @inheritDoc
108+
*/
109+
public function get(string $key): string {
110+
if (!$this->has($key))
111+
{
112+
throw new InvalidArgumentException("Заголоков {$key} отсутсвует.");
113+
}
114+
115+
return $this->headers[$key];
116+
}
117+
118+
/**
119+
* @inheritDoc
120+
*/
121+
public function getAll(): array {
122+
$this->headers = !empty($this->headers) ? $this->headers : $this->getAllHeaders();
123+
124+
return $this->headers;
125+
}
126+
}

interfaces/HeadersInterface.php

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
/**
5+
* Интерфейс HeadersInterface
6+
*
7+
* Декларирует методы обязательные для реализации компонента Headers
8+
*/
9+
interface HeadersInterface {
10+
11+
/**
12+
* Устанавливает заголовок(и)
13+
*
14+
* @param array $params Заголовок(и) [key => value]
15+
*
16+
* @return void
17+
*/
18+
public function set(array $params): void;
19+
20+
/**
21+
* Добавляет заголовок. Если заголовок уже существует, то он будет перезаписан.
22+
*
23+
* @param array $params Заголовки [key => value]
24+
*
25+
* @return void
26+
*/
27+
public function add(array $params): void;
28+
29+
/**
30+
* Удаляет заголовок
31+
*
32+
* @param string $key Заголовок
33+
*
34+
* @return void
35+
*/
36+
public function remove(string $key): void;
37+
38+
/**
39+
* Удаляет все заголовки
40+
*
41+
* @return void
42+
*/
43+
public function removeAll(): void;
44+
45+
/**
46+
* Проверяет наличие заголовка. Проверка идет на наличие ключа и значения
47+
*
48+
* @param string $key Заголовок
49+
*
50+
* @return bool
51+
*/
52+
public function has(string $key): bool;
53+
54+
/**
55+
* Получает значение заголовка
56+
*
57+
* @param string $key Заголовок
58+
*
59+
* @return string
60+
*
61+
* @throws InvalidArgumentException
62+
*/
63+
public function get(string $key): string;
64+
65+
/**
66+
* Получает все заголовки
67+
*
68+
* @return array
69+
*/
70+
public function getAll(): array;
71+
}

0 commit comments

Comments
 (0)