Kdyby/Replicator – Component already exists

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

Ahoj, poprvé zkouším Kdyby/Replicator (nainstalovaný pomocí composeru do nette 2.2.7) ale jaksi mi nefunguje ani uvedený příklad https://componette.org/search/?…

Do BasePresenteru do metody startup jsem dal \Kdyby\Replicator\Container::register();

pak jsem si v presenteru vytvořil formulář (přesně dle příkladu z odkazu):

protected function createComponentAddProjectForm() {
        $form = new Form();
        $form->addDynamic('users', function (Container $user) {
            $user->addText('name', 'Name');
            $user->addText('surname', 'surbame');
            $user->addDynamic('addresses', function (Container $address) {
                $address->addText('street', 'Street');
                $address->addText('city', 'City');
                $address->addText('zip', 'Zip');
            }, 1);
        }, 2);
        $removeEvent = callback($this, 'MyFormRemoveElementClicked');
        $users = $form->addDynamic('users', function (Container $user) use ($removeEvent) {

            $user->addSubmit('remove', 'Remove')
                            ->setValidationScope(FALSE)
                    ->onClick[] = $removeEvent;
        }, 1);
        $users->addSubmit('add', 'Add next person')
                        ->setValidationScope(FALSE)
                ->onClick[] = callback($this, 'MyFormAddElementClicked');
        $form->addSubmit('create_project', 'Vytvořit project');
        $form->onSuccess[] = $this->addProjectFormSucceeded;
        return $form;
    }

latte (ale tam se ani nedostanu – chyba vzniká v kodu výše…):

{layout '../../../../templates/@layout.latte'}

{block content}

{form addProjectForm}
    {if $form->hasErrors()}
            <div n:foreach="$form->errors as $flash" class="alert alert-danger">
                <button type="button" class="close" data-dismiss="alert">&times;</button>
                {!$flash}
            </div>
        {/if}
    {*{label NAME /}{input NAME}<br><br>*}

    {foreach $form['users']->containers as $user}

        {$user['name']->control} {$user['name']->label}

    {/foreach}<br>

    {input 'add'}<br><br>
    {input 'remove'}<br><br>
    {input 'create_project'}
{/form}

a dostanu tuto chybu:

Nette\InvalidStateException
Component with name ‚users‘ already exists.

Co dělám špatně? Díky.

jiri.pudil
Nette Blogger | 1029
+
0
-

Voláš dvakrát $form->addDynamic('users', ...)

n.u.r.v.
Člen | 485
+
0
-

Ok, díky… neměl bys někde nějaký funkční presenter k nahlédnutí – protože ten příklad na addon portálu je neúplný – například vůbec nevím co má být v metodě createOne() atd…

No, budu zkoušet dál…Díky

n.u.r.v.
Člen | 485
+
0
-

Tak zatím jsem to vyřešil pomocí návodu zde: https://forum.nette.org/…ateone-error