1: <?php
2: /*
3: * Copyright (c) 2016 @trashtoy
4: * https://github.com/trashtoy/
5: *
6: * Permission is hereby granted, free of charge, to any person obtaining a copy of
7: * this software and associated documentation files (the "Software"), to deal in
8: * the Software without restriction, including without limitation the rights to use,
9: * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
10: * Software, and to permit persons to whom the Software is furnished to do so,
11: * subject to the following conditions:
12: *
13: * The above copyright notice and this permission notice shall be included in all
14: * copies or substantial portions of the Software.
15: *
16: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18: * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19: * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20: * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21: * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22: */
23: /**
24: * PHP class file.
25: * @auhtor trashtoy
26: * @since 2.2.0
27: */
28: namespace Peach\Http\Header;
29:
30: use Peach\Util\Arrays;
31:
32: /**
33: * 1 行分の Set-Cookie ヘッダーをあらわすクラスです.
34: */
35: class CookieItem
36: {
37: /**
38: * Cookie 名をあらわす文字列です.
39: *
40: * @var string
41: */
42: private $name;
43:
44: /**
45: * Cookie 値をあらわす文字列です.
46: *
47: * @var string
48: */
49: private $value;
50:
51: /**
52: * この cookie が持つ属性をあらわします.
53: *
54: * @var CookieOptions
55: */
56: private $options;
57:
58: /**
59: * 指定されたキーおよび値の cookie を持つ CookieItem オブジェクトを構築します.
60: *
61: * @param string $name cookie のキー
62: * @param string $value cookie の値
63: * @param CookieOptions $options その cookie が持つ属性
64: */
65: public function __construct($name, $value, CookieOptions $options = null)
66: {
67: $this->name = $name;
68: $this->value = $value;
69: $this->options = $options;
70: }
71:
72: /**
73: * Set-Cookie ヘッダーの値 ("Set-Cookie: " に続く文字列部分) を書式化します.
74: *
75: * @return string Set-Cookie ヘッダーの値部分
76: */
77: public function format()
78: {
79: $data = $this->formatData();
80: return ($this->options === null) ? $data : implode("; ", Arrays::concat($data, $this->options->formatOptions()));
81: }
82:
83: /**
84: * 出力の先頭の "key=value" 部分を書式化します.
85: *
86: * @return string "key=value" 形式の文字列
87: */
88: private function formatData()
89: {
90: $name = rawurlencode($this->name);
91: $value = rawurlencode($this->value);
92: return "{$name}={$value}";
93: }
94: }
95: