Dynamický formulář – nečisté řešení

Danny
Člen | 146
+
0
-

Dobrý den,
mám formulář pro který se dynamicky vypisujou prvky podle jazyka viz.

	public function create(callable $onSuccess)
	{
		$form = $this->factory->create();

		foreach($this->languages as $language) {
			$form->addText('name_'.$language, 'Název:')
				->setRequired('Zadejte název');

			$form->addPassword('content_'.$language, 'Obsah:')
				->setRequired('Zadejte obsah');

		}

		$form->addSubmit('save', 'Uložit');

		$form->onSuccess[] = function (Form $form, $values) use ($onSuccess) {


			$onSuccess();
		};

		return $form;
	}

A v šablone vykresluju formulář

{foreach $languages as $language}
    {var $name = 'name_'.$language}
    {var $content = 'content_'.$language}
<div class="col-md-6">
    <div class="col-md-12">
        <div class="form-group">
            {label $name}{/label}
            {input $name}
        </div>
    </div>
    <div class="col-md-12">
        <div class="form-group">
            {label $content}{/label}
            {input $content}
        </div>
    </div>
</div>
{/foreach}

A ve zpracování budu muset zase projet všechny prvky, podle koncovky _cs a _en rozebrat a pak vložit do databáze, jde mi o to abych si do DB vložil 2 záznamy, jeden se sloupcem ‚cs‘ druhý s ‚en‘, abych si pak mohl vybírat všechny záznamy s konkrétní language, ale přijde mi to jako hrozně špatné řešení, nějaký nápad jak na to lépe?

Děkuji moc! :)

Editoval Danny (16. 8. 2018 18:08)

David Matějka
Moderator | 6445
+
+1
-

ahoj, pouzij container

Danny
Člen | 146
+
0
-

Díky za tip. A jak prosimtě ten container vykreslím v šabloně? Pokud tedy ve formu budu mít třeba 2 containery, chápu ten princip ale nejsem si jistej jak s tim pracovat, jestli to vykreslovat nějak $form->getContainers() foreachem a pak ve zpracování dělat to samé, aby se to děalo vše dynamicky podle jazyků. Díky moc @DavidMatějka

Editoval Danny (16. 8. 2018 17:54)

David Matějka
Moderator | 6445
+
+3
-

osobne bych to udelal zhruba nasledovne

public function create(callable $onSuccess)
{
    $form = $this->factory->create();
	$container = $form->addContainer('language');

    foreach($this->languages as $language) {
		$language = $container->addContainer($language);
		$language->addText('name', 'Název:');
		$language->addText('content', 'Obsah:');

    }

    $form->addSubmit('save', 'Uložit');

    $form->onSuccess[] = function (Form $form, $values) use ($onSuccess) {
		foreach ($values->language as $language => $data) {
			// $data->name, $data->content
		}

        $onSuccess();
    };

    return $form;
}
{foreach $languages as $language}
<div class="col-md-6">
    <div class="col-md-12">
        <div class="form-group">
            {label language-$language-name/}
            {input language-$language-name}
        </div>
    </div>
    <div class="col-md-12">
        <div class="form-group">
            {label language-$language-content/}
            {input language-$language-content}
        </div>
    </div>
</div>
{/foreach}
Danny
Člen | 146
+
0
-

Tak to je perfektní už tomu rozumim, moc ti děkuji :)