Udaje z formu do dalsieho presenteru

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

Dobrý deň,

mam takyto problem:
Formular mam vykresleny v jednom presenteri ale spracovat ho chcem v inom. Teda po odoslani formularu mam
nieco taketo:

<?php
$this->redirect('nazov druheho presenteru');
?>

Avsak v tom presenteri uz ziadne $_POST/$_GET nie su.
Skusal som aj namiesto redirect pouzit setAction pri vytvarani formularu ale to nefungovalo.
Ako sa teda mam dostat k datam v inom presenteri?
Nevadilo by ani to, keby sa mi tie hodnoty maju ukladat do SESSION.

Editoval Kalino (5. 1. 2014 16:04)

Oli
Člen | 1215
+
0
-

K $_POST a $_GET by jsi nikdy neměl přistupovat přímo. Všechny hodnoty jsou v Nettím formuláři sanitizované a ošetřené.

Otázka je, jestli máš správně návrh aplikace. Opravdu potřebuješ data zpracovat v jiném presenteru? Nestačí ti zpracovat je v aktuálním a po zpracování se přesměrovat na ten novej?

Pokud to fakt potřebujš, tak záleží na tom, jakou používáš verzi Nette. V 2.0.x by mohlo fungovat něco jako callback(Presenter, 'zpracujData'); v 2.1 je callbeck odstraněnej a místo něj je myslím array(Presenter, 'zpracujData');

Kalino
Člen | 8
+
0
-

Ale ak neobsahuju ziadne data, tak je jedno ako k nim pristupujem. Hladisko bezpecnosti by som mohol riesit az po tom, co to bude funkcne.

Je to vyhladavaci formular, teda sa v dalsom presenteri zobrazia vysledky hladania, teda tento sposob asi nebude mozny.

Ok, pozriem sa nato ako funguje callback.

Oli
Člen | 1215
+
0
-

Jestlize se jedna o vyhledavaci formular, tak bych to udelal takhle: Formular bych odesilal metodou GET a potom v presenteru budes mit vsechny parametry z url pristupne pomoci

$this->getParameter();

Nezapomeň je ale kontrolovat.

japlavaren
Člen | 404
+
0
-

search form je specialny pripad formularu (vykresleny na vela strankach smerujuci na jednu)
prakticky mas 2 moznosti:

1. klasicky form (Nette\Forms\Form) a search presenter, ktory bude vyhladavat (v tom potom mozes pristupovat k name vyhladavacieho inputu ako parametru prislusneho renderu)

<?php
class BasePresenter{
	function createComponentSearch(){
		$form = new Nette\Forms\Form;
		$form->setMethod($form::GET)
			->setAction($this->link('Search:')
			->addText('q', 'Vyraz')
			->addSubmit('search', 'Hladaj dunco');
		return $form;
	}
}
// ...
class SearchPresenter{
	function renderDefault($q){
		dump($q);
	}
}
?>

2. moznost je mat klasicky UI/Form ktory spracujes cez callback a nasledne presmerujes na ten search/iny presenter s parametrami (ak mas zlozitejsie vyhladavanie a ma nejaku masku. pr. search/znacka/model automobilu…)

kapišto

Editoval japlavaren (5. 1. 2014 18:09)

Kalino
Člen | 8
+
0
-

Robil som to tou druhou metodou, tak to funguje (ten formular sluzi presne na vyhladavanie automobilov).

Kazdopadne som sa rozhodol pre ulozenie dat do SESSION, aby sa dalo do formularu nacitat posledne vyhladavanie.

Dakujem :)

Editoval Kalino (5. 1. 2014 18:48)

Oli
Člen | 1215
+
0
-

Tohle ma jednu nevyhodu: Co kdyz si neco vyhledam a vysledek vyhledavani budu chtit nekomu poslat? ;-)

japlavaren
Člen | 404
+
0
-

do session to urcite neukladaj. ukladaj vytvor z toho link a na ten presmeruj. ako pise oli znemoznuje to ulozit si vyhladavanie do zaloziek