Načtení defaultní hodnoty do formuláře

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

Ahoj,
mám takovej problém, ale nikde jsem na něj nenašel řešení. Respektive řešení je celkem dost, ale žádné mě nefunguje a nevím jak to mám udělat. Potřeboval bych naplnit select defaultníma hodnotama z databáze. Problém je ten, že na stránce je víc formulářů a já nevím jak je odlišit. Můj kod je:
Presenter:

protected function createComponentEditRole()
{
    $form = new Form();
    $form->addSelect('role', null, array('guest','registered','moderator','administrator'));
    $form->addHidden('userId');

    $form->addSubmit('send', 'Odeslat');
    $form->onSuccess[] = callback($this, 'editRoleSubmitted');
    return $form;
}

Template:

<tr n:foreach="$users as $user1" n:class="$iterator->isOdd() ? odd : even">
        <td>{$user1->id}</td>
        <td>{$user1->username}</td>
        <td>{$user1->name}</td>
        {if $user->isAllowed('users', 'edit')}
            <td>
                {form editRole}
                    {control $form errors}
                    {input userId value => $user1->id}
                    {input role} {input send}
                {/form}
            </td>
        {else}
            <td>{$user1->role}</td>
        {/if}
    </tr>

Bylo by hrozně super, kdyby mě někdor řekl, co mám změnit/dopsat aby to fungovalo popřípadě uvedl nějakou funkční ukázku. Zkoušel jsem i podle Vychozí data pro editační formulář , ale taky me to neslo (mozna jsem nekde udelal chybu.
Předem díky za jakékoli tipy ;-)

Tomáš Votruba
Moderator | 1114
+
0
-

Ahoj, přesně na to je určený Container replicator. Vše budeš mít na jednom místě a bez magie :).

Oli
Člen | 1215
+
0
-

Díky, ale abych řekl pravdu tak jsem to moc nepochopil. Popravdě ani moc nechápu container. Myslím, že jsem to funkčně připojil, ale píše mě to, že komponenta neexistuje, problem je, zže nevím jakou komponentu mám volat. Zkoušel jsem to nějak takhle:
Presenter:

use Nette\Forms\Container;

---

protected function createComponentEditRole()
    {

        $form = new Form();

        $form->addDynamic('dates', function (Container $container) {
                $container->addDate('date');
        });

        $form->addSelect('role', null, array('guest','registered','moderator','administrator'));

        $form->addHidden('userId');

        $form->addSubmit('send', 'Odeslat');
        $form->onSuccess[] = callback($this, 'editRoleSubmitted');
        return $form;
    }

Template:

{form editRole}
	{foreach $form['editRole']->containers as $user}
                {control $form errors}
                <div class="pair">
                 	{$user['dates']->control} {$user['dates']->label}
            	</div>
                {input userId value => $user1->id}
        	{input role} {input send}
	{/foreach}
{/form}

Dělal jsem to podle návodu u toho Replicatoru
Zkoušel jsem co mě napadlo, ale tohle je pro mě zatím španělská vesnice. Mohl by jsi mě prosím nějak nakopnout? Případně uvést nějaký funkční příklad? Zatím mě ani není moc jasný jak to využít v tom mem problemu :-) Každopádně díky.

.:M@rt!n:.
Člen | 201
+
0
-

Já jsem tohle řešil tak že jsem si form pojemnoval podle toho k čemu je určenej: tedy například budeš mít:

protected function createComponentEditRoleAdmin()

A pak k tomu jen uděláš latte editRoleAdmin.latte (nevím jestli nebude jenom editAdmin-ale to ti pomůže laděnka) a v něm vložený form

{form editRoleAdmin}