Jak správně používat formulář v cyklu?

Allconius
Člen | 309
+
0
-

Ahoj, dá se nějak předávat parametr do formu , který si sám vykresluji přes {form} ?
Mám to takto:


{foreach $posts as $post}

//$post->parametr = "123456";

                   {form editForm, $post->parametr}

					....................
					....................
					<input type="hidden" name="parametr" value="$post->parametr">
                    {/form}


{/foreach}

protože je form v cyklu tak tam potřebuji dostat ideálně <input type=„hidden“ name=„parametr“ value=„$post->parametr“>. Když ten hidden přidám do šablony tak ho form ignoruje a je tedy potřeba ho nějak předat do Presenteru, ale ten zápis {form editForm, $post->parametr} ten parametr jen přidá do html tagu <form>:

<form action="/kontakty/" method="post" class="form-horizontal" id="frm-editForm" 0="123456">

Marek Bartoš
Nette Blogger | 1130
+
0
-

Tak si input i s hodnotou přidej při vytváření instance formuláře, ne při renderu.

Allconius
Člen | 309
+
0
-

Marek Bartoš napsal(a):

Tak si input i s hodnotou přidej při vytváření instance formuláře, ne při renderu.

Ahoj, a jak tu hodnotu toho parametru dostanu do presenteru ? To je právě to co nevím.


$form->addHidden('parametr', $parametr);

Pepino
Člen | 239
+
0
-

Jestli přidáváš do formu políčko tak jak přidáváš tak můžeš pro získání dat použít místo getValues getHttpData.

Další možnost by mohl být https://doc.nette.org/…n/multiplier

m.brecher
Generous Backer | 700
+
0
-

@Alconius

Ahoj, a jak tu hodnotu toho parametru dostanu do presenteru ? To je právě to co nevím.

Z kódu který Jsi poslal není jasné, jak získáváš $posts, kde je $post->parametr, ani jak vlastně formulář vytváříš. Do šablony injektuješ $posts z presenteru, třeba takhle?

public function actionPost(...){
    ....
    $this->template->posts = $this->postRepository->getAll();
}

Pokud vytváříš formulář v presenteru pomocí metody createComponentPostForm() tak tam přesuň $this->postRepository->getAll() přes privátní pole presenteru třeba takhle:

class PostPresenter extends BasePresenter
{
    private array $posts;

    .....

public function actionPost(...){
    ....
    $this->template->posts = $this->posts = $this->postRepository->getAll();
}
}

public function createComponentPostForm(): Form
{
     $form = new Form;

     .....
	foreach($this->posts as $post){
        $form->addHidden(...., $post->parameter);
    }
}

Kód píšu z hlavy a je potřeba ho upravit, princip je jednoduchý – když ve formuláři něco potřebuješ tak si to tam předáš. Pokud vytváříš formulář pomocí factory tak si předej $posts z presenteru do factory a z ní do formuláře.

Allconius
Člen | 309
+
+1
-

Pepino napsal(a):

Jestli přidáváš do formu políčko tak jak přidáváš tak můžeš pro získání dat použít místo getValues getHttpData.

Další možnost by mohl být https://doc.nette.org/…n/multiplier

Ahoj, díky, ten multiplier je to co potřebuji :-)