Předání proměnná z latte do componenty v presenteru
- .:M@rt!n:.
- Člen | 201
Ahoj,
potřeboval bych proměnou z latte šablony nějak dostat do componety
v presenteru. Componenta je pro vytvoření formuláře. Půjde to nějak
jednoduše udělat?
- .:M@rt!n:.
- Člen | 201
Ja tam neprogramuju jen jsem si vypsanou promenou z db ulozil do promenné a ted bych s ní potřeboval pracovat ve formuláři v presenteru.
- .:M@rt!n:.
- Člen | 201
To ano. Ale nechci resit zda do mam dobre nebo ne, ale zda je mozné tu promenou do te komponenty nejak dostat?
Děkuji
- David Matějka
- Moderator | 6445
muzes dostat promennou do render metody, ale predava se az pri vykreslovani..
pokud je tedy nutna treba pro zpracovani formulare, tak je to opravdu pozde, viz
zivotni cyklus:
- .:M@rt!n:.
- Člen | 201
elevate napsal(a):
nebo si můžeš v presenteru udělat jednoduše setter
//presenter public function setXY($xy) { $this->xy = $xy; } //šablona {$presenter->setXY($variable)}
díky to bude ono ;) akorat mam ten problem s ulozenim te hodnoty. Mám:
$this->xyRepository->create($this->xy, $this->user->getIdentity()->name . " " . $this->user->getIdentity()->surname, $form->values->text, new \Nette\DateTime);
takto ji nemohu použít pro uložení do db?
- elevate
- Člen | 31
Na to ti odpoví obrázek výše.
Předpokládám, že toto řešíš v eventu onSuccess nebo něčem
takovym.
To znamená, že se komponenta vytvoří na úrovni handle<signal> a
v té době je ještě property $xy prázdná. Hodnotu do ní přidáš až na
úrovni render<View>
----edit
Pokud formulář neni odeslaný, tak se komponenta vytváří až při renderování. (Vždy se vytvoří až když je nutně potřeba), takže v tomto případě když nastavíš setXY před vykreslením komponenty (nad {control form}/{form form}), tak to funguje bez problémů.
Editoval elevate (11. 12. 2013 14:30)
- .:M@rt!n:.
- Člen | 201
teď tě moc už nechápu. v presenteru mám:
public function setXY($xy)
{
$this->xy = $xy;
}
protected function createComponentResponseForm() {
//vytvoření a odeslání formuláře na responseFormsubmitted
}
public function responseFormSubmitted(Form $form) {
$this->xyRepository->create($this->xy, $this->user->getIdentity()->name . " " . $this->user->getIdentity()->surname, $form->values->text, new \Nette\DateTime);
}
a v šabloně:
{$presenter->setXY($xy)}
{form responseForm}
EDIT: Tak jsem došel k funkčnímu řešení. při vytváření formu jsem tu proměnou uložil to hidden pole a jde to tak jak potřebuji. Díky za rady.
Editoval .:M@rt!n:. (11. 12. 2013 14:41)
- elevate
- Člen | 31
Takhle se volají metody:
startup
action
handle
render
Při obyčejném vykreslení, se ti komponenta vytváří až když je
potřeba (v šabloně {form responseForm}).
Takže:
startup
action
handle
render: // nastavíš proměnnou, vytvoří se komponenta
Ale když je formulář odeslanej, tak zpracování formuláře probíhá na úrovni handle
startup
action
handle: vytvoří se komponenta a ty si z ní vytáhneš values a ukládáš,
ale xy == null
render: //nastavíš proměnnou
Editoval elevate (11. 12. 2013 14:49)