blob: 8e99f1319a058a95c0bf4171ef0537381a34da6b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
<?php
/**
* THttpRequest, THttpCookie, THttpCookieCollection, TUri class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.pradosoft.com/
* @copyright Copyright © 2005-2014 PradoSoft
* @license http://www.pradosoft.com/license/
* @package Prado\Web
*/
namespace Prado\Web;
/**
* THttpCookieCollection class.
*
* THttpCookieCollection implements a collection class to store cookies.
* Besides using all functionalities from {@link TList}, you can also
* retrieve a cookie by its name using either {@link findCookieByName} or
* simply:
* <code>
* $cookie=$collection[$cookieName];
* </code>
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @package Prado\Web
* @since 3.0
*/
class THttpCookieCollection extends TList
{
/**
* @var mixed owner of this collection
*/
private $_o;
/**
* Constructor.
* @param mixed owner of this collection.
*/
public function __construct($owner=null)
{
$this->_o=$owner;
}
/**
* Inserts an item at the specified position.
* This overrides the parent implementation by performing additional
* operations for each newly added THttpCookie object.
* @param integer the specified position.
* @param mixed new item
* @throws TInvalidDataTypeException if the item to be inserted is not a THttpCookie object.
*/
public function insertAt($index,$item)
{
if($item instanceof THttpCookie)
{
parent::insertAt($index,$item);
if($this->_o instanceof THttpResponse)
$this->_o->addCookie($item);
}
else
throw new TInvalidDataTypeException('httpcookiecollection_httpcookie_required');
}
/**
* Removes an item at the specified position.
* This overrides the parent implementation by performing additional
* cleanup work when removing a TCookie object.
* @param integer the index of the item to be removed.
* @return mixed the removed item.
*/
public function removeAt($index)
{
$item=parent::removeAt($index);
if($this->_o instanceof THttpResponse)
$this->_o->removeCookie($item);
return $item;
}
/**
* @param integer|string index of the cookie in the collection or the cookie's name
* @return THttpCookie the cookie found
*/
public function itemAt($index)
{
if(is_integer($index))
return parent::itemAt($index);
else
return $this->findCookieByName($index);
}
/**
* Finds the cookie with the specified name.
* @param string the name of the cookie to be looked for
* @return THttpCookie the cookie, null if not found
*/
public function findCookieByName($name)
{
foreach($this as $cookie)
if($cookie->getName()===$name)
return $cookie;
return null;
}
}
|