Jak zjistit změnu persistentního parametru?
- Patrik Votoček
- Člen | 2221
Potřeboval bych zjistovat jestli nedošlo ke změně persistentního
parametru a provést nějákou akci.
Řekněme že mám persistentní parametr $lang aktuálně
v ní mám nastaveno ‚cs‘ a změním ji na ‚en‘. Ale při této změně
chci provést ověření jestli je jazyk ‚en‘ dostupný. (Ano vím že
můžu v routách nastavit povolené parametry ale tohle je vzorový příklad
někde to třeba nejde kvuli tomu že by jich tam bylo hodně).
Chtěl jsem to udělat takto:
<?php
class DefaultPresenter extend BasePresenter
{
/** @persistent */;
public $lang;
protected function startup()
{
if ($this->lang != $this->getParam('lang'))
overExistenciJazyka($lang);
}
}
?>
Ale je tu problém protože už ve startup-u mám v proměné $this->lang nové hodnoty. Jak tedy na to? Nechce se mě to řešit přez cookie
Editoval vrtak-cz (2. 5. 2009 19:27)
- pmg
- Člen | 372
/** @persistent */
public $lang;
/** @persistent */
public $oldLang;
public function loadState(array $params)
{
$lang = &$params['lang'];
$old = &$params['oldLang'];
if (isset($lang) && $lang !== $old) {
if (isOkay($lang)) {
$params['oldLang'] = $lang;
else {
unset($params['lang'], $params['oldLang']);
}
}
parent::loadState($params);
}
- pmg
- Člen | 372
Ale řešení přes session se mi zdá správné. Ten parametr
oldLang
by tam dost prudil.
Dále by se nabízelo udělat ze změny jazyka signál. Jazyk
je lepší přenášet v URL.
/** @persistent */
public $lang;
public function loadState(array $params)
{
if (isset($params['lang'])) {
$session = Environment::getSession('display');
if ($session->lang !== $params['lang']) {
if (isOkay($params['lang']) {
$session->lang = $params['lang'];
} else {
$params['lang'] = $session->lang;
}
}
}
parent::loadState($params);
}
Editoval pmg (11. 4. 2009 9:32)
- Ola
- Člen | 385
Jo, ta url by s oldLang vypadala divně, navíc by do toho mohl návštěvník sahat, takže by se mohl vyhnout kontrole existence jazyka .. Ale zase jazyk (teda parametr lang) je lepší přenášet v URL, protože kdyby byl uložen v session, dělalo by to border ve vyhledávačích ..
Editoval Ola (11. 4. 2009 10:16)
- Patrik Votoček
- Člen | 2221
phx napsal(a):
Nejak mi neni jasne PROC chces detekovat zmenu?
Někdy se to může hodit
phx napsal(a):
To je overeni existence jazyka tak narocna vec ze se nemuze delat pokazde???
Nikde sem neříkal že to musí bejt ověřování jazyka. Jazyk je tady uveden jako příklad.
phx napsal(a):
Jinak asi nejlepsi reseni overovani vuci hodnote v SESSION.
Oni se perzistentni parametry přenášejí v SESSION? V jaké struktůře?
- nAS
- Člen | 277
vrtak-cz napsal(a):
Oni se perzistentni parametry přenášejí v SESSION? V jaké struktůře?
Perzistentní parametry se ukládají v URL. phx to myslel tak, že si hodnotu uložíš ještě jednou redundantně do SESSION, kde ji uživatel nemůže změnit a když se nebude shodovat hodnota perzistentního parametru a hodnota v SESSION, tak došlo ke změně.
Ale popravdě řečeno si také moc nedokážu představit příklad, kde by se to hodilo. Pokud chci, aby uživatel něco nemohl přímo měnit, tak to uložím v SESSION a dám mu nějaké metody, jak to může změnit kontrolovaně v aplikaci. A pokud mi nevadí, že to změní, tak to patří do URL (tedy např. do perzistentní parametrů).