67 lines
1.4 KiB
PHP
67 lines
1.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* http://www.alternateinterior.com/2006/09/a-viewstate-for-php.html
|
|
* Управление состоянием между страницами
|
|
*/
|
|
namespace ctiso\Form;
|
|
|
|
class ViewState // extends Collection
|
|
{
|
|
/** @var array */
|
|
private $values = [];
|
|
|
|
/**
|
|
* Устанавливает значение
|
|
* @param string $name
|
|
* @param mixed $value
|
|
*/
|
|
function set($name, $value): void
|
|
{
|
|
$this->values[$name] = $value;
|
|
}
|
|
|
|
/**
|
|
* Возвращает значение
|
|
* @param string ...$args
|
|
* @return mixed
|
|
*/
|
|
function get(...$args)
|
|
{
|
|
$result = $this->values;
|
|
foreach ($args as $name) {
|
|
if (!isset($result[$name])) {
|
|
return null;
|
|
}
|
|
$result = $result[$name];
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Сохраняет состояние
|
|
* @return string
|
|
*/
|
|
function saveState(): string
|
|
{
|
|
return base64_encode(serialize($this->values));
|
|
}
|
|
|
|
/**
|
|
* Восстанавливает состояние
|
|
* @param string $value
|
|
*/
|
|
function restoreState($value): void
|
|
{
|
|
$this->values = unserialize(base64_decode($value));
|
|
}
|
|
|
|
/**
|
|
* Возвращает состояние
|
|
* @return array
|
|
*/
|
|
function export()
|
|
{
|
|
return $this->values;
|
|
}
|
|
}
|