po úspěšné registraci zobrazení výsledku

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

Dobrý večer,
zkouším po úspěšné registraci vypsat data co zadal uživatel… ale jediné co mě jde, tak je flashMessage, ale já bych chtěl, abych po úspěšné registraci vypsal data co uživatel zadal něco jako rekapitulace..

  1. uživatel zadá data
  2. odešle
  3. po vyhodnocení se redirectne (buď na stejný view, nebo jiný), kde bude vypsané něco stylu:

Rekapitulace registrace:
Jméno: xxxx
Email: xxxx

Musím to dávat do sessionu, nebo stačí v presenteru v metodě beforeRender dát třeba:

<?php
final class UserRegistracePresenter extends \BasePresenter
{

	protected function beforeRender()
	{
		$this->template->registraceDokoncena = false;
	}

	protected function createComponentUserRegistraceForm($name)
	{
		$form = new UserRegistraceForm($this, $name);
	}
}
?>

Ale jak pak ve formu dát data do této proměnné? Když form načítám.
Přez flashMessage jen vypíšu info, že vše proběhlo v pohodě a redirectnu zpět na stejnou stránku, ale to je jen půlka :-D

Editoval tatyalien (14. 2. 2011 21:06)

Peter9
Člen | 69
+
0
-

Nejak nechápem otázke. Pre inputy: atributy value.

tatyalien
Člen | 239
+
0
-

No mám tohle:

<?php

namespace FrontModule\Forms;

use Nette\Application\AppForm, Nette\Forms\Form, Nette\Environment, Nette\Forms
    \IFormControl, Nette\Web\Html, Model\User, exception;

class UserRegistraceForm extends AppForm
{
    public function __construct($parent, $name)
    {
        parent::__construct($parent, $name);

        $this->addProtection('Prosím odešlete údaje znova (vypršela platnost bezpečnostního tokenu).');
        // získání dat uživatele
        $user = $this->getPresenter()->getUser();

        $this->addText('name', 'Jméno:')->addRule(Form::FILLED,
            'Prosím zadajte svoje jméno.');
        $this->addText('email', 'Email:')->setEmptyValue('@')->addRule(Form::FILLED,
            'Prosím zadajte svůj email.')->addRule(Form::EMAIL,
            'Zadaná hodnota není Emailová adresa.');
        $this->addPassword('password', 'Heslo:')->addRule(Form::FILLED, 'Zadejte heslo')->
            addRule(Form::MIN_LENGTH,
            'Zadané heslo je příliš krátké, zvolte si heslo alespoň o %d znacích', 3);
        $this->addPassword('password2', 'Heslo (ověření):')->addRule(Form::FILLED,
            'Zadejte heslo ještě jednou, pro kontrolu')->addRule(Form::EQUAL,
            'Zadané hesla se neshodují', $this['password']);

        $this->addSubmit('send', 'Uložit');
        $this->addSubmit('reset', 'Vymazat')->setValidationScope(null);
        $this->onSubmit[] = array($this, 'formSubmited');
    }

    public function formSubmited($form)
    {
        try {
            if ($form['reset']->isSubmittedBy()) {
                // vrátím se zpět na editaci
                $this->getPresenter()->redirect("UserRegistrace:");
            } else {
                // zde dodělat registraci....
                // dostaneme data z formuláře
                $values = $form->getValues();
                // kontrola, zda zadaný email není již v db
                $row = User::findByName($values["name"]);

                if ($row) {
                    throw new Exception("Zadané jméno je již použito, zvolte jiné jméno.");
                }
                unset($row);
                $row = User::findByEmail($values["email"]);
                if ($row) {
                    throw new Exception("Zadaný email je již použit, zvolte jiný email.");
                }
                unset($row);
                // načtení saltu
                $config = Environment::getConfig('security');
                $password =  sha1($values['password'] . $config->salt);
                $row = User::userRegistrace($values["name"], $values["email"], $password);
                if (!$row) {
                    throw new Exception("Registrace se nezdařila, opakujte dotaz později prosím.");
                }
                // info o registraci
                $this->getPresenter()->flashMessage('Registrace úspěšně dokončena.');
                // redirectnu zpět na registraci
                $this->getPresenter()->redirect('UserRegistrace:');
            }
        }
        catch (exception $e) {
            $form->addError($e->getMessage());
        }
    }
}
?>

Ale jak po redirectu zobrazit to co uživatel zadal, prostě aby se mě v šabloně nevypsal znova furmulář atd…
šablonu mám:

<?php
{block #title}{include #parent} | Registrace{/block}
{block #content}
// nějak sem dostat proměnou (tu z beforeRenderu dostanu)
{if !$registraceDokoncena}
<h1>Registrace uživatele</h1>
<fieldset>
<legend>Registrace</legend>
{control userRegistraceForm}
</fieldset>
{else}
<h1>Registrace dokončena</h1>
<strong>Rekapitulace:</strong>
<ul>
// Jak sem dostat údaje...
<li>Jméno: [<strong>xxxx</strong>]</li>
<li>Email: [<strong>xxxx</strong>]</li>
</ul>
{/if}
?>
redhead
Člen | 1313
+
0
-

Přes session to bude asi nejlepší.

Peter9
Člen | 69
+
0
-

Session, Cookie, token v adrese…

Najlepšie asi bude Session.

tatyalien
Člen | 239
+
0
-

Tady se to dělá standartně typu:

<?php
$_SESSION["nejaka_promenna"] = "hodnota";
?>

Nebo nějak jinak v nette?

Peter9
Člen | 69
+
0
-

Na toto interface asi nebude treba :D :D

tatyalien
Člen | 239
+
0
-

Díky ;) a přeji brou noc.