Více formulářů na jedné stránce

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

Zdravíčko,

chtěl bych se Vás optat, jak nejlépe a čistě vyřešit více formulářů na jedné stránce + zpracování. Chci si vytvořit několik components (AccountEmailControl.php, AccountPasswordControl.php) – všechno to bude vracet formuláře – právě na jedné stránce. Vytvořil jsem v presenteru komponentu a dále do té komponenty vytvářel formuláře (UI\Control). Tady je přibližná struktura projektu:

SettingsPresenter.php

<?php
class SettingsPresenter extends SecuredPresenter
{
    /**
	 * @return Components\User\Account\AccountEmailControls
	 */
	protected function createComponentAccount()
	{
		$component = $this->accountFactory->create();
		$component->onSuccess[] = function ()
		{
			$this->flashMessage('Account was updated');
			$this->redirect('...');
		};
		return $component;
	}
}
?>

account.latte:

{block content}
	<h2>{_ui.settingsAccount.title}</h2>
	{control account}
{/block}

AccountEmailControl.php (samostatná komponenta jednoho formuláře):

<?php
interface IAccountFactory
{
	/**
	 * @return AccountEmailControl
	 */
	public function create();
}

class AccountEmailControl extends UI\Control
{
    protected function createComponentFormEmail()
    {
		...
    }
}
?>

accountEmail.latte

{form formEmail}
<article>
		<fieldset>
			<div class="stacked">
				{label currentEmail /}
				{input currentEmail, class=>range}
			</div>
		</fieldset>
</article>
{/form}

Editoval RePRO (6. 10. 2015 11:16)

Azathoth
Člen | 495
+
0
-

v případě, že mám více formulářů na jedné stránce, tak každý formulář zabalím do komponenty, která se stará o inicializaci i uložení dat a presenter má jen tovární metody na komponenty a obstarává flashmessage a redirecty…takže to mám stejně, jako tady ukazuješ ty.