phplibrary/src/Form/ViewState.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;
}
}