Heslo jako znovupoužitelná komponenta

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

Ahoj,

na několika stránkách mám formulář, kde požaduji heslo a kontrolu hesla, tedy 2 vstupy typu password. Vzniká mi tak na 3 stránkách duplicita typu addPassword()->addRule()… Existuje způsob, jak ke stávajícímu formuláři připojit tyto 2 vstupy, které by byly někde zvlášť?

Děkuju za odpověď.

CZechBoY
Člen | 3608
+
0
-

Muzes to udelat jako custom policko a podedit od textinputu. Potom pres extensionMethod pridat metodu addPassword na Container.

Šaman
Člen | 2666
+
+1
-

Možná hledáš formulářový kontejner. Pro přidání do formuláře nemusíš používat třídu addContainer, ale vytvořit si ho samostatně a do formuláře pak přidat jen jeho instanci.

<?php
$form->addContainer('foo'); // přidá nový kontejner který pak musím něčím naplnit
$form['foo'] = new \NS\FooContainer(); // ekvivalent - přidá již připravený kontejner
?>

P.S. Samozřejmě je ideální používat generované továrničky a nepoužívat operátor new, ale to už je jiná problematika.

Editoval Šaman (17. 3. 2016 23:27)

CZechBoY
Člen | 3608
+
0
-

<offtopic>

@Šaman Úplně nejlepší by bylo mít možnost nastavit továrničku kontejneru ;-)

services:
	myContainerFactory: App\MyContainerFactory
	nette.application.ui.form:
		setup:
			- setContainerFactory(@myContainerFactory)

Že bych zkusil pull request? :-)
</offtopic>

Facedown
Člen | 38
+
0
-

Šaman napsal(a):

Možná hledáš formulářový kontejner. Pro přidání do formuláře nemusíš používat třídu addContainer, ale vytvořit si ho samostatně a do formuláře pak přidat jen jeho instanci.

<?php
$form->addContainer('foo'); // přidá nový kontejner který pak musím něčím naplnit
$form['foo'] = new \NS\FooContainer(); // ekvivalent - přidá již připravený kontejner
?>

P.S. Samozřejmě je ideální používat generované továrničky a nepoužívat operátor new, ale to už je jiná problematika.

Teď, když to už mám v containeru, jako mohu container vykreslit pomocí n:name?

EDIT:

Nakonec jsem to udělal takto:

<div class="form-group">
    {label $form[passwords]->components['password'] /}
    {input $form[passwords]->components['password'] class => "form-control", placeholder => "Heslo"}
    <p class="help-block">Minimálně 6 znaků</p>
</div>
<div class="form-group">
    {label $form[passwords]->components['repeatedPassword'] /}
    {input $form[passwords]->components['repeatedPassword'] class => "form-control", placeholder => "Heslo znovu"}
</div>

Není zde možnost, jak tohle „html“ umístit někam do šablony a tu potom vykreslit tak, aby byla propojená s containerem?

Editoval Facedown (18. 3. 2016 10:45)