připojení latte k formulář

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

Ahoj,
s pomocí: https://doc.nette.org/cs/forms
jsem si vytvořil formulář (MujForm.php) a latte šablonu (MujForm.latte). Oba soubory mám ve stejné složce, ale nevím jak je mám spojit, abych pak někde v jiné stránce mohl formulář lehce přidat.
(mám Nette Framework 2.0.4)
Díky.

Editoval vk83 (11. 8. 2012 12:15)

Ot@s
Backer | 476
+
0
-

Předpokládám, že chceš pracovat komplet v Nette. Máš ho stážený a v něm najdi sandbox. Ten můžeš použít jako základ svojí aplikace/prezentace.

Pak si usmyslíš, že chceš (třeba) na homepage přihlašovací formulář. Pak stačí do HomepagePresenter.php přidat něco jako:

protected function createComponentSignInForm() {
	$form = new Nette\Application\Form;
	$form->addText('name', 'Jméno:');
	$form->addPassword('password', 'Heslo:');
	$form->addSubmit('login', 'Přihlásit se');
	$form->onSuccess[] = callback($this, 'signInFormSubmitted');
	return $form;
}
// volá se po úspěšném odeslání formuláře
public function signInFormSubmitted(UI\Form $form)
{
	$values = $form->getValues();
        // ...
	$this->flashMessage('Byl jsi úspěšně přihlášen.');
	$this->redirect('Homepage:');
}

Pak stačí do app/templates/Homepage/default.latte někam dovnitř do bloku {#content}{/#} přidat {control signInForm} a máš to.

vk83
Člen | 22
+
0
-

Díky, ale já jsem chtěl asi něco jiného.
Jak připojit latte pro formulář (latte s inputama) k formu?

Kdybych použil to, co jsi mi poradil, tak si ještě chci vytvořit SignInForm.latte. A mě zajímá, jak tomu nyní mám říci, že se pro vykreslení toho formuláře má použít to moje SignInForm.latte?

Elijen
Člen | 171
+
0
-

Jak vypadá ten MujForm.php vevnitř? Je to Control? Pokud ano, tak stačí do render metody přidat:

public function render()
{
   $this->template->setFile(__DIR__ . "/MujForm.latte");
   $this->render();
}
vk83
Člen | 22
+
0
-

Díky za odpověď.
Ne, ten MujForm je: class MujForm extends Nette\Application\UI\Form
Je to tedy také nějak udělat, když ta třída je potomkem Form?

Elijen
Člen | 171
+
0
-

Podle mě ne. Proč dědíš od Form? Správně bys asi měl dědit od Nette\Application\UI\Control a Form vytvářet pomocí továrničky sub-komponenty. Nějak takhle:

class MujForm extends \Nette\Application\UI\Control
{
   public function render()
   {
      $this->template->setFile(__DIR__ . "/MujForm.latte");
      $this->render();
   }

   public function createComponentForm()
   {
      $form = new \Nette\Application\UI\Form();
      //...
      //inicializace formulare
      //...
      return $form;
   }
}
vk83
Člen | 22
+
0
-

Na té stránce: https://doc.nette.org/cs/forms
byl právě také příklad malého formuláře (class SignInForm extends UI\Form). Říkal jsem si, že když dělám pouze formulář, bude lepší použít tohle a přímo všechno podědit po Formu než po Control.

Ale pokud tedy není možné nastavit takto vytvořenému formuláři jeho latte šablonu, tak asi budu muset postupovat, jak jsi radil, a použít Control.