Jak zjistit zda je user updatován nebo vytvářen?

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

Ahoj,

tuším, že tohle už tu určitě muselo být. Mám stejný formulář pro updatování i pro vytvoření usera. Pokud je updatován, hodím do url jeho id a dle něho vyplním formulář hodnotami. Krom jiného ukládám id usera do SESSION, protože po odeslání formuláře zmizí parametr z url a formulář se nechová jako update ale jako přidání nového usera ⇒ pokud je isset($_SESSION[‚id‘]) tak se user updatuje, jinak se vytváří.

  1. Je potřeba uchovávat id s session nebo to jde i jinak?

Pokud to ničemu nevadí, nastává tu jeden problém. Pokud neodešlu formulář s upravenými údaji a přejdu rovnou na jinou stránku, zůstane mi v session id usera, což způsobuje, že se formulář stále chová jako pro update…

  1. Jak smažu session, když uživatel stránku opustí, bez uložení změn?
studna
Člen | 181
+
+1
-

Přidej si do formuláře hidden input „id“, který v případě editace nastav pomocí $form->setValues(['id' => $userId]). Při zpracování formuláře pak můžeš jednoduchou podmínkou ověřit, zda-li chceš záznam vložit a nebo updatnout.

if(empty($values->id)) {
	// insert
} else {
	// update
}

Editoval studna (11. 3. 2015 20:12)

ondrej256
Člen | 187
+
0
-

Co třeba udělat podmínku:
Pokud je uživatel přihlášen tak je formulář pro update
pokud uživatel přihlášen není tak pro vytvoření nového uživatele?

Pokud je uživatel přihlášen tak asi nebude potřebovat tvořit další účet ne? :-)

kikinet
Člen | 35
+
0
-

Bohužel. Systém je postavený na tom, že pouze uživatel s danými právy může vytvářet nové uživatele. V případě, že by to šlo, je tohle určitě logická verze :)

kikinet
Člen | 35
+
0
-

Dobrý nápad, bohužel hidden value nedokážu poslat jako parametr do funkce pro update. Netuším ale proč. Nenašla jsem nic ani na stackoverflow. Tento řádek update($values->id), hlásí Unexpected type of parameter: Nette\Forms\Controls\HiddenField. Jelikož parametr pro update() funkci je int, zkoušela jsem poslat do funkce intval($values->id). Nečekaně ale, vrátila se mi stejná chyba. Nějaká rada?

Editoval kikinet (12. 3. 2015 15:30)

Jan Endel
Člen | 1016
+
0
-

Jak ty values taháš, je tam řádek:

$values = $form->getValues();

? Páč teď to vypadá, že tam rovnou sypeš celý form.

studna
Člen | 181
+
0
-

A nebo místo $form->getValues() můžeš použít přímo $values jako druhý parametr Form

$form->onSuccess[] = function(Form $form, $values) {
	$values->id;
}
kikinet
Člen | 35
+
0
-

Tohle nešlo před tím, než se formulář odeslal (pochopitelně). Moje chyba, opraveno. Děkuji za rady :)