Skip to content

Commit 13f1553

Browse files
committed
Create HttpSetCookieTrait.php
1 parent 51249eb commit 13f1553

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

src/Traits/HttpSetCookieTrait.php

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
/**
3+
* Трейт установки http cookie.
4+
* @package evas-php\evas-http
5+
* @author Egor Vasyakin <[email protected]>
6+
*/
7+
namespace Evas\Http\Traits;
8+
9+
use \InvalidArgumentException;
10+
use Evas\Base\Help\PhpHelper;
11+
use Evas\Http\Cookie;
12+
use Evas\Http\Traits\HttpCookiesTrait;
13+
14+
trait HttpSetCookieTrait
15+
{
16+
/**
17+
* Подключаем трейт поддержки списка cookies.
18+
*/
19+
use HttpCookiesTrait {
20+
withCookies as protected;
21+
withCookie as protected;
22+
}
23+
24+
/**
25+
* Установка нового свойства cookie.
26+
* @param string|Cookie имя свойства или объект Сookie
27+
* @param mixed|null значение
28+
* @param int|null время жизни cookie
29+
* @param string|null путь
30+
* @param string|null хост
31+
* @param bool|null защищенное ли соединение
32+
* @param bool|null поддержка только http
33+
* @return self
34+
* @throws InvalidArgumentException
35+
*/
36+
public function setCookie($name, $value = null, int $expires = null, string $path = null, string $host = null, bool $secure = null, bool $httpOnly = null): object
37+
{
38+
if (is_string($name)) {
39+
$props = compact('value', 'expires', 'path', 'host', 'secure', 'httpOnly');
40+
$cookie = (new Cookie($name, $props));
41+
} else if ($name instanceof Cookie) {
42+
$cookie = $name;
43+
} else {
44+
throw new InvalidArgumentException(sprintf(
45+
'Argument 1 $name must be type of string or instance of Cookie, %s given',
46+
PhpHelper::getType($name)
47+
));
48+
}
49+
$this->withCookie($cookie->name, $cookie);
50+
return $this;
51+
}
52+
53+
/**
54+
* Запуск сборки свойства cookie.
55+
* @param string имя свойства
56+
* @param callable|array колбэек или массив данных свойства
57+
* @return Cookie
58+
*/
59+
public function buildCookie(string $name, $props = null): Cookie
60+
{
61+
if (is_callable($props)) {
62+
$cookie = new Cookie($name);
63+
$props = $props->bindTo($cookie);
64+
$props();
65+
} else {
66+
$cookie = new Cookie($name, $props);
67+
}
68+
$this->setCookie($cookie);
69+
return $cookie;
70+
}
71+
}

0 commit comments

Comments
 (0)