Persistentní parametr v komponentě
- kajda
- Člen | 7
Ahoj,
mám v aplikaci formulář, který umožňuje editovat a přidávat entity – třeba příspěvky na blog. Blog je ale vícejazyčný, a tak i příspěvky musí být ve více jazycích. Tím pádem musí být možné formulář vyplnit libovolnou jazykovou mutací příspěvku.
Pro tento účel jsem chtěl do formuláře přidat komponentu, která umožní změnit jazyk editované mutace. Pro ilustraci, jak to má vypadat, přikládám obrázek.
Tam jsem ale narazil. Komponentu se mi přidat podařilo, ale ve chvíli, kdy
se v ní nastavený jazyk pokusím anotovat jako perzistentní, vyhodí Tracy
při pokusu o změnu jazyka chybu Undefined variable: since v
Nette/Application/UI/Presenter.php:1168
.
To mě navedlo k tomu, jestli nedělám něco špatně. Je v pořádku mít
komponentu ve formuláři, nebo ne?
Komponentu ve formuláři registruji takhle:
public function createComponentLangSwitch() {
return new FormLangSwitch($this->getLanguage(), $this, "langSwitch");
}
kde getLanguage
je metoda formuláře, která vrací přepravku
s informacemi o jazyce.
Samotná třída komponenty pak vypadá následovně:
class FormLangSwitch extends \Nettex\Application\Component\Control {
/** @persistent */
public $language;
public function __construct(\Nettex\Lang\Lang $lang, \Nette\ComponentModel\IContainer $parent = NULL, $name = NULL) {
parent::__construct($parent, $name);
$this->language = $lang->getCode();
}
protected function beforeRender() {
parent::beforeRender();
$this->template->langs = $this->getPresenter()->getModuleManager()->getLanguageList();
$this->template->lang = \Nettex\Lang\LanguageManager::getLocale($this->language);
}
public function handleSelectLang($langCode) {
$this->language = $langCode;
}
/**
* @return \Nettex\Lang\Lang vybraný jazyk
*/
public function getSelectedLang() {
return $this->language;
}
}
\Nettex\Application\Component\Control
dědí od
\Nette\Application\UI\Control
a pouze implementuje automatické
připojení šablony ke komponentě a přidává beforeRender
voláno před samotným renderem.
Dělám něco špatně? Tušíte, čím je způsobena ta chyba v Presenteru? Já došel k závěru, že mám teda někde problém s těmi persistentními proměnnými, ale nevím, co s tím. Takže budu vděčný za každou radu a klidně i návrh jiného řešení přepínání jazyka.
Předem díky.
Editoval kajda (13. 6. 2014 11:27)
- kajda
- Člen | 7
Bohužel, nepomohlo..
Pořadí parametrů by mohlo mít na něco vliv, když se uvnitř volá konstruktor předka? Abych věděl pro příště, jestli když ke konstruktorům odděděných tříd přidávám parametry, tak jestli musí být na konci nebo mohou obsadit i první místa.
Ono jsem to tak řadil už jen proto, že $parent
i
$name
jsou defaultně NULL
a $lang
nikoli.