Nefunkční persistenty v 0.9.5
- mcmatak
- Člen | 504
Mám šablonu např. objednávky v presenteru OrderPresenter, ten má persistenty id a filter.
V této šabloně mám takovýto odkaz
<?php
<a href="{plink Product:edit, id => $item->product->id}" target="_blank">{$item->name}</a>
?>
presenter ProductPresenter má také persistenty id a filter, mají sice stejného předka BasePresenter nicméně v tom nejsou persistenty nastaveny!
přesto se mi přenese i filter, což způsobuje nemalé problémy, protože není kompatibilní, kde je chyba?
kde hledat chybu?
díky za rady
přenos persistentů mezi dvěma různými presentery, bug or feature?
Editoval mcmatak (9. 9. 2010 20:18)
- Ondřej Mirtes
- Člen | 1536
Tohle jsme nedávno s Davidem řešili a Nette pozná, jestli jsou parametry definované z jednoho předka nebo v každém presenteru zvlášť. V prvním případě se přenášejí, ve druhém ne. Hledal bych tedy chybu ve tvém kódu.
- mcmatak
- Člen | 504
ááá pozor asi máš pravdu, tohle jsem si neuvědomil, na vině asi bude tato fce
<?php
public function saveState(array &$params)
{
$this->filter = $this->getRestriction()->toGet();
parent::saveState($params);
}
?>
filter sice opravdu využivaji oba presentery, ale rozhodně nechci aby se to přenášelo, byl by nějaký easy fix?
- mcmatak
- Člen | 504
ze by změna saveState, takže chybělo asi předávat reflection, řešení:
<?php
public function saveState(array &$params, $reflection = NULL)
{
parent::saveState($params, $reflection);
if (array_key_exists("filter", $params)) {
$params['filter'] = $this->getRestriction()->toGet();
}
}
?>
- mcmatak
- Člen | 504
Tak snad ještě jednou a naposledy,
co potřebuji od fce saveState, složení jednoho persistentu je komplikované, tedy dochází base encode, gzip, a dalším string fcím které nějak tu proměnnou vygenerují, nelze to proto dělat pokaždé, když se změní jakýkoli parametr který má vliv na složení toho persistentu, proto to odkládám až na dobu kdy někdo potřebuje ten persistent, tedy saveState,
ovšem jak to udělat, když někdo ten persistent chce vnutit?
->link(Nekam, filter ⇒ silenost)
v takovem pripade nechci prepisovat ten filtr a chci ho pri tom nechat, ale jak to udelat?