Editace – persistentní parametr nebo form hiddent input

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

Jaké je správné řešení editace položky? Ukládáte si ji do persistentního parametru nebo přes formulářové hidden pole? Vidím v některých aplikacích to i to, tak nevím, co je doporučováno.

jiri.pudil
Nette Blogger | 1032
+
0
-

https://doc.nette.org/…editing-form

tl;dr:

Chcete-li editovat záznam, musíte předat jeho id ukládající funkci. Můžete k tomu sice použít $form->addHidden(), ve většině případů je ale vhodnější použít persistentní parametr.

Glottis
Člen | 129
+
0
-

zalezi, jestli ti vadi, ze id bude videt v url. s persistentnim parametrem se osobne me lepe pracuje. obcas jsem to resil i ulozenim id do sessions, aby mi to nemohl nikdo po vyvolani editace modifikovat

Šaman
Člen | 2666
+
0
-

Zatím jsem vždycky použil hidden pole. Na nastavený persistentní parametr bych se moc nespoléhal, ten je součástí adresy a kdokoliv ho může přepsat, smazat, přidat. Přidávací a editační formulář jsou u mě dvě samostatné třídy, které mohou obsahovat společný kontejner s většinou políček. Nicméně ani ten kontejner nepoužívám a oba formuláře jsou zcela samostatné – a často se liší ve víc než jen v tom hidden poli (ledacos se editovat nedá, nebo jen některá povolená pole).
Pokud si dobře vzpomínám, tak ve všech firmách kde jsem pracoval se používal podobný princip.

Jiří Nápravník
Člen | 710
+
0
-

jiri.pudil: presne tuhle stranku mam uz delsi dobu na zalozkach. nicmene videl jsem prave i jinde, hidden pole, dokonce tuším i Davida, tak jsem si říkal, co je správnější.

Šaman: díky, mě je nějak sympatičtější taky používat hidden pole, jsem tak zvyklý odjinud. nicméně používám tedy jednu třídu pro editaci i přidávání, většinou se shoduje ve všem kromě hidden pole, ale to když nemá id, tak přidávám, jinak edituji.

thunderbuff
Člen | 164
+
0
-

Já to řeším tak, že si ve formu místo hidden prvku přímo ve třídě formuláře držím editovanou položku nebo její ID. Není potřeba hidden pole.

<?php

class MyEditForm extends Form {

	private $id;

	public function __construct($id) {
		parent::__construct();

		$this->id = $id;

		$this->addText(...)
		...

		$this->onSuccess[] = callback($this, 'success');
	}

	public function success(MyEditForm $form) {
		echo "Editovane ID je " . $this->id;
	}



}

?>
David Matějka
Moderator | 6445
+
0
-

ja vetsinou pouzivam persistentni parametr

@Šaman: a hidden pole se nenecha prepsat? :)

Oli
Člen | 1215
+
0
-

@thunderbuff: Takže vlastně si předáváš id v URL. Nebo kde ho získáš?

btw. Přijde mi lepší dědit Control než Form. Chvilku jsem taky používal Form, jako předka pro třídu s formulářem. Control ti ale dává minimálně jednu velkou výhodu. Oddělíš i šablonu formuláře od šablony presenteru. Je teda pravda, že jsem nezkoušel, jestli funguje ve třídě, která dědí od Form metoda render(). Mám pocit, že jsem to i někde četl, že je lepší Control než Form jako předek pro formulářovou třídu…

Abych nebyl uplně OT, tak já taky používám persistentní parametr :-)