Předání dat z obsluhy formuláře do šablony

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

Zdravim,

potreboval bych poradit, jak dostat promennou $searched_string do sablony search.latte. Vyhledavaci formular je v Homepage:default

v HomepagePresenter.php:

<?php
    public function renderSearch() {
    }

    protected function createComponentSearchForm() {
        $form = new UI\Form();
        $form->addText('search_string', 'Vyhledat: ')
                ->addRule($form::FILLED, 'Prosím, vložte vyhledávaný řetězec!');
        $form->addSubmit('send', 'Vyhledat');
        $form->onSuccess[] = array($this, 'searchFormSubmitted');
        return $form;
    }

    public function searchFormSubmitted(UI\Form $form) {
        $values = $form->getValues();
        $this->template->searched = $values->search_string;
        $this->redirect("Homepage:search");
    }
?>

pokud priradim search_string do $this->template->searched v metode searchFormSubmitted je v sablone search.latte nedostupna.

Dekuji za rady.

Skippous
Člen | 21
+
0
-

Do šablony to musíš poslat v metodě renderSearch(). Po odeslání tam přesměrováváš. Pro uchování hodnoty můžeš použít persistentní proměnou presenteru.

https://doc.nette.org/…n/presenters#…

Editoval Skippous (3. 2. 2014 15:03)

t_burger
Člen | 8
+
0
-

to Skippous: s tou persistentni promennou to funguje. Nefunguje ale, kdyz pres persistentni promennou potrebuju prenest vysledek db dotazu (objekt). Pises „muzes pouzit“. Existuje nejaky lepsi zpusob. Nechce se mi pouzivat public promennou. S nette zacinam, myslel jsem zda prommena nejde predat pres redirect do renderSearch().

Diky.

Editoval t_burger (3. 2. 2014 15:47)

David Matějka
Moderator | 6445
+
0
-

zadnej vysledek neprenasej, presmeruj s tim persistentnim parametrem a az pak vyhledavej.. (public property pouzij pro tohle bez obav)

t_burger
Člen | 8
+
0
-

matej21 napsal(a):

zadnej vysledek neprenasej, presmeruj s tim persistentnim parametrem a az pak vyhledavej.. (public property pouzij pro tohle bez obav)

Pred chvili jsem to udelal, jak pises, jeste nez jsem si to od tebe precetl a funguje :-). Diky za potvrzeni meho pristupu. Protoze s nette zacinam, jde mi taky o to nepochytit nejake spatne navyky.

Jeste poznamka, zkousel jsem do persistentni promenne dat pole a mel jsem problem, pak jsem narazil na toto:

UI\Presenter a Control cituji:

Presenter nyní zabraňuje, aby vám někdo podstrčil do persistentního parametru pole. Pokud ale pole chcete, uveďte ho jako výchozí hodnotu,

Skippous
Člen | 21
+
0
-

Asi budeš mít problém v deklaraci, zkus takto:

/**
 * @var array
 * @persistent
 */
public $foo = array();
t_burger
Člen | 8
+
0
-

Skippous napsal(a):

Asi budeš mít problém v deklaraci, zkus takto:

/**
 * @var array
 * @persistent
 */
public $foo = array();

Jasne, vim, ja to psal jen jako doplnujici info pro nekoho, kdo toto vlakno bude cist.