Skip to content

Instantly share code, notes, and snippets.

@Kedrigern
Created July 9, 2013 11:10
Show Gist options
  • Save Kedrigern/5956564 to your computer and use it in GitHub Desktop.
Save Kedrigern/5956564 to your computer and use it in GitHub Desktop.
<?php
/**
* Homepage presenter.
*/
class HomepagePresenter extends BasePresenter
{
public function __construct(\Nette\Http\Session $session)
{
parent::__construct();
$this->session = $session;
$config = new PersistentModel($session);
$config->preparePresenter($this);
}
public function __destruct()
{
$config = new PersistentModel($this->session);
$config->savePersistents($this);
}
}
<?php
class PersistentModel extends Nette\Object
{
/**
* @var Nette\Http\Session
*/
protected $session;
/**
* @var Nette\Http\SessionSection
*/
protected $section;
/**
* @param Nette\Http\Session $session
*/
public function __construct(\Nette\Http\Session $session)
{
$this->session = $session;
$this->section = $this->session->getSection('defaults');
}
/**
* @param Nette\Application\IPresenter $presenter
*/
public function preparePresenter(\Nette\Application\UI\PresenterComponent $presenter)
{
/**
* 1) Nedefaultní hodnota z url
* 2) Hodnota se session
* 3) Default hodnota presenteru
*/
foreach($presenter->getPersistentParams() as $per)
{
$def = $presenter->reflection->defaultProperties[$per];
if($presenter->$per !== $def) continue;
$sesVal = $this->section->$per;
if(isset($sesVal)) {
$presenter->$per = $sesVal;
}
}
}
public function savePersistents(\Nette\Application\UI\PresenterComponent $presenter)
{
foreach($presenter->getPersistentParams() as $per)
{
$def = $presenter->reflection->defaultProperties[$per];
if($presenter->$per !== $def) {
$this->section->$per = $presenter->$per;
} else {
unset($presenter->$per);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment