Dynamický formulář – nečisté řešení
- Danny
- Člen | 146
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)
- Danny
- Člen | 146
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
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}