-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQRequest.php
More file actions
102 lines (95 loc) · 3.53 KB
/
QRequest.php
File metadata and controls
102 lines (95 loc) · 3.53 KB
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
<?php
/**
* @author Ivan Chelishchev <chelishchev@gmail.com>
*/
class QRequest extends CHttpRequest
{
/**
* @param $name Есть возможность обращаться к вложенному массиву: Example[0][name]
* @param null $defaultValue
* @return mixed|null
*/
public function getParam($name, $defaultValue = null)
{
$name = $this->_reformatNameToPath($name);
$val = self::getFromArrayByKey($name, $_GET);
if(is_null($val))
{
$val = self::getFromArrayByKey($name, $_POST);
}
return is_null($val) ? $defaultValue : $val;
}
/**
* @param $name Есть возможность обращаться к вложенному массиву: Example[0][name]
* @param null $defaultValue
* @return mixed|null
*/
public function getQuery($name, $defaultValue = null)
{
$name = $this->_reformatNameToPath($name);
$val = self::getFromArrayByKey($name, $_GET);
return is_null($val) ? $defaultValue : $val;
}
/**
* @param $name Есть возможность обращаться к вложенному массиву: Example[0][name]
* @param null $defaultValue
* @return mixed|null
*/
public function getPost($name, $defaultValue = null)
{
$name = $this->_reformatNameToPath($name);
$val = self::getFromArrayByKey($name, $_POST);
return is_null($val) ? $defaultValue : $val;
}
/**
* Преобразуем в путь Example[0][name] => Example.0.name
* @param $name
* @return string
* @author Ivan Chelishchev <chelishchev@gmail.com>
*/
protected function _reformatNameToPath($name)
{
//Example[0][name] => Example.0.name
return strtr($name, array(
'[' => '.',
']' => '',
)
);
}
/**
* Получение по вложенному ключу значения массива.
* Ключи передаются в строке соединенные через $delimiter. В случае не находа отдается null
* @static
* @param $key
* @param array $array
* @param string $delimiter
* @return mixed
* @author Ivan Chelishchev <chelishchev@gmail.com>
*/
public static function getFromArrayByKey($key, array &$array, $delimiter = '.')
{
//разделяю на массив ключей и удаляю . которые лишние
$partKeys = explode($delimiter, trim($key, $delimiter));
$tmp = &$array;
$lastKeys = end($partKeys);
foreach($partKeys as $partKey)
{
//если данный ключ существует, то идем в глубь дальше
if(is_array($tmp) && array_key_exists($partKey, $tmp))
{
//ссылаемся на вложенный массив
$tmp = &$tmp[$partKey];
}
//если такого ключа не существует, то выходим
else
{
return null;
}
}
//если был проход успешный до последнего ключа, то возвращаем результат
if(!next($partKeys))
{
return $tmp;
}
}
}