Jak z komponenty dat vedet presenteru, co se stalo za akci

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ja
Člen | 260
+
0
-

Ahoj,
pouzivam newsletter formular jakozto komponentu, v ramci ji i newsletterove emaily zpracovavam, problem je tato cast:

<?php
		if($this->newsletter->findBy($values)) { // zaznam jiz existuje, takze email smaze
            $this->newsletter->deleteBy($values);
        }
        else{ // zaznam neexistuje, takze email prida
            $this->newsletter->save($values);
        }
?>

presenter se pak stara o presmerovani v pripade onSuccess:

<?php
	protected function createComponentNewsletterForm()
    {
        $form = $this->newsletter_form_factory->create();
        $form->onSuccess[] = function ($form) {
            // zde zjistit co se stalo a vypsat adekvatni flash message
            $form->getPresenter()->redirect('default');
        };
        return $form;
    }
?>

chtel bych vypsat flashmessage podle toho, zda email byl smazan nebo pridan, ale nevim jak si z komponenty tuto informaci vytahnout. Jak byste to prosim resili vy, jake je best practice?

Diky

David Matějka
Moderator | 6445
+
+2
-

Vytvor si vlastni udalosti, ktery potrebujes.

Ja
Člen | 260
+
0
-

Nedari se mi to nejak naroubovat na tu tovarnicku, uz jsem to zkousel ale pohorel jsem. Mohl bys dat prosim jeste maly hint?

Tovarna je definovana klasicky:

<?php
class NewsletterFormFactory extends Object
{
	/** @var Newsletter */
	private $newsletter;
	public function __construct(Newsletter $newsletter)
	{
		$this->newsletter = $newsletter;
	}
	// atd atd
?>
David Matějka
Moderator | 6445
+
0
-

formular jakozto komponentu

A kde mas tu komponentu?

a ta prvni cast kodu, tu mas kde?

Ja
Člen | 260
+
0
-

Jestli rozumim dobre tve otazce tak komponentu normalne vytvarim v presenteru, newsletter_form_factory Nette vstrikuje do presenteru samo.

<?php
    protected function createComponentNewsletterForm()
    {
        $form = $this->newsletter_form_factory->create();
        $form->onSuccess[] = function ($form) {
            // zde zjistit co se stalo a vypsat adekvatni flash message
            $form->getPresenter()->redirect('default');
        };
        return $form;
    }
?>
Ja
Člen | 260
+
0
-

Tam je totiz problem, ze se snazime resit udalost definovanou nad tovarnickou a ne nad samotnym formem, to je ta cast, kde jsem se zasekl.

newPOPE
Člen | 648
+
0
-

Ano Nette ti to injektne do presenteru akurat mu to musis povedat pomocou /* @inject */ anotacie pri danej property.

A momentalne je asi najlepsie „wrapnut“ form do komponenty na ktorej si vytvoris vlastne eventy a tie potom odpalis. Navod ako na to je na planette.