Získání hodnoty z onSuccess v presenteru

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

Zdravím, mám dotaz.
Vytvářím formuláře jako komponenty přes DI. Redirect po odeslání formuláře provádím v presenteru (tak jak to je v sandboxu, víceméně). Ale zajímá mě, jak ideálně získat např. id záznamu a následně na něho moct přesměrovat právě v presenteru. Jak hodnotu, kterou mám v onSuccess přímo v komponentě načíst v druhém onSuccess v presenteru?

Komponenta

class GeneratePrintFormFactory extends Nette\Object
{
	/** @var PrintedCodesModel  */
	private $printedCodesModel;
	//-------------------------- atd

	public function __construct(PrintedCodesModel $printedCodesModel, CodeModel $codeModel, PrintModel $printModel, User $user)
	{
		$this->printedCodesModel = $printedCodesModel;
		$this->codeModel = $codeModel;
		//----------------------- atd
	}

	/**
	 * @return Form
	 */
	public function create()
	{
		$form = new Form;
		$form->addText('count', 'Počet štítků')->setRequired();
		//--------------------
		$form->addSubmit('sub', 'Uložit');

		$form->onSuccess[] = array($this, 'formSucceeded');
		return $form;
	}

	public function formSucceeded(Form $form, $values)
	{
		$count = $values->count;
		$customerId = $this->user->identity->customer;

		$list = $this->printedCodesModel->add($customerId, $this->user->id, $values->print);

		// vytvorim novy seznam, chtel bych na nej presmerovat
	}

}

Přesměrování v presenteru

protected function createComponentGeneratePrintForm()
	{
		$form = $this->generatePrintFormFactory->create();

		$form->onSuccess[] = function ($form, $this) {
			// jak zajistit, abych zde mohl pracovat s ID vytvoreneho seznamu
			// a mohl ho pouzit treba v redirectu?
			$this->flashMessage('Bylo vygenerovano ' . $form->values->count . ' stitku', 'success');
			$this->redirect('this');
		};

		return $form;
	}

moc diky

tomees
Člen | 59
+
0
-

https://doc.nette.org/…s/form-reuse

je toto reseni stale best practise? Nebo je i nejake jine?

iguana007
Člen | 970
+
0
-

Mělo by snad fungovat toto:

public function formSucceeded(Form $form)
    {
		$values = $form->getValues();
        $count = $values->count;
        $customerId = $this->user->identity->customer;

        $list = $this->printedCodesModel->add($customerId, $this->user->id, $values->print);

        $this->getPresenter()->redirect('fooBar', $list);
    }

Editoval iguana007 (20. 1. 2016 17:36)

CZechBoY
Člen | 3608
+
+1
-

K tomu by se hodily vlastni události. Vytvor si napr $onSave a predej si to idcko.
Je to popsane na te stejne strance.