Implementacia nette formulara do sablony

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

Ahojte,

ked si vytvorim subor v app/forms ContactForm.php, ako ho nasadim do sablony.latte … skusal som dat {control contactForm} ale nenaslo to … ci to asi aj do presentera musim dat, vsak? Dik za radu

Vastlik
Člen | 58
+
0
-

Ahoj,
koukni se na Dokumentaci První formulář nebo se nech inspirovat v sandboxu
Pokud to máš za pomocí factory, musíš si ten formulář nainjectovat do presenteru.

Editoval Vastlik (10. 2. 2016 20:07)

Takeshi
Člen | 596
+
0
-

Vastlik napsal(a):

Ahoj,
koukni se na Dokumentaci První formulář nebo se nech inspirovat v sandboxu
Pokud to máš za pomocí factory, musíš si ten formulář nainjectovat do presenteru.

dik ale ako si to injectnem a ako nasledne nacitam do sablony?

Vastlik
Člen | 58
+
+4
-

V presenteru.

	/** @var SignFormFactory @inject */
	public $factory;
	/**
	 * Sign-in form factory.
	 * @return Nette\Application\UI\Form
	 */
	protected function createComponentSignInForm()
	{
		$form = $this->factory->create();
		$form->onSuccess[] = function () {
			$this->redirect('Homepage:');
		};
		return $form;
	}

V šabloně:
{control signIn}

Vysvětlím ten presenter.
Za pomocí tohoto kódu si nainjectues ten formulář do presenteru. Ten formulář musíš mít zaregistrovaný v configu.

/** @var SignFormFactory @inject */
	public $factory;

Za pomocí tohodle, vytvoříš ten formulář. $form = $this->factory->create(); – vytvoření formuláře

$form->onSuccess[] = function () {
			$this->redirect('Homepage:');
		};

return $form; – vrací formulář, dke si ho pak šablona veme (nejsem si jist, možná mě někdo opraví)
za pomocí createComponentSignInForm, říkáš, vytvoř componentu se jménem signIn

protected function createComponentSignInForm()
	{
		$form = $this->factory->create();
		$form->onSuccess[] = function () {
			$this->redirect('Homepage:');
		};
		return $form;
	}

Editoval Vastlik (10. 2. 2016 20:59)

Takeshi
Člen | 596
+
0
-

Dakujem za odpoved, zdalo sa mi, ze toto bude na sto % fungovat, ale mam tam niekde chybu … skusal som ju napravit, ale bez vysledku … takze

config.neon

<?php
services:
	- App\Forms\SignFormFactory
?>

BasePresenter.php

<?php

namespace App\Presenters;

use Nette;
use App\Model;
use Nette\Application\UI;

/**
 * Base presenter for all application presenters.
 */

abstract class BasePresenter extends Nette\Application\UI\Presenter
{
    /** @var \SignFormFactory @inject */
    public $factory;

    /**
     * Sign-in form factory.
     * @return Nette\Application\UI\Form
     */

    protected function createComponentSignInForm()
    {
        $form = $this->factory->create();
        $form->onSuccess[] = function(){
            $this->redirect('Homepage:');
        };
        return $form;
    }
}
?>

*.latte

<?php
{control signIn}
?>

Chyba

<?php
Class or interface 'SignFormFactory' used in @var annotation at App\Presenters\BasePresenter::$factory not found. Check annotation and 'use' statements.
?>
CZechBoY
Člen | 3608
+
+2
-

Máš špatně namespace…

/** @var \App\Forms\SignFormFactory @inject */
    public $factory;

případně to můžeš dát do use a potom používat jen SignFormFactory.