Kdyby/FormsReplicator – problém v editaci formuláře s odebráním

kiCkZ
Člen | 153
+
0
-

Zdravim,

mam formulář s dynamickými prvky, ale jakmile přejdu do editace a dám 2× odebrat položku, tak se mi jedna přidá i přesto,že ještě 2 existují. Když dám odeslat(Uložit obchodní případ) v tomto stavu, tak mi to začné dávat hlášku ohledně nevyplněné položky.

Formulář:

<?php
     $businessCaseItems = $form->addDynamic('businessCaseItems', function (Container $businessCaseItem) use ($removeEvent) {

            $businessCaseItem->addHidden('id');

            $businessCaseItem->addText('name', 'Jméno položky - krátké')
                ->setAttribute('class', 'form-control')
                ->addConditionOn($this->cost_exhibit, Form::EQUAL, FALSE)
                ->setRequired('%label nebylo vylněno');

            $businessCaseItem->addInteger('price', 'Cena bez daně')
                ->setAttribute('class', 'form-control')
                ->addConditionOn($this->cost_exhibit, Form::EQUAL, FALSE)
                ->setRequired('%label není vylněna');

            $businessCaseItem->addInteger('amount', 'Množství')
                ->setAttribute('class', 'form-control')
                ->addConditionOn($this->cost_exhibit, Form::EQUAL, FALSE)
                ->setRequired('%label není vylněno');

            $businessCaseItem->addSelect('taxes_id', 'Sazba daně', $this->taxRepository->fetchPairs())
                ->setAttribute('class', 'form-control')
                ->setValue('21%')
                ->addConditionOn($this->cost_exhibit, Form::EQUAL, FALSE)
                ->setRequired('Nebyla vybrána sazba daně');

            $businessCaseItem->addSubmit('remove', 'Odstranit položku')
                ->setAttribute('class', 'btn btn-default')
                ->setValidationScope(array())
                ->onClick[] = $removeEvent;
        }, 1);

        $businessCaseItems->addSubmit('addItem', 'Přidat položku')
            ->setValidationScope(array())
            ->onClick[] = [$this, 'businessCaseFromItemAdd'];

        $form->addSubmit('send', 'Uložit obchodní případ')
            ->setAttribute('class', 'btn btn-primary btn-main pull-right')
            ->onClick[] = [$this, 'processForm'];

?>
<?php
 public function businessCaseFromItemAdd(SubmitButton $button)
    {
        $businessCaseItem = $button->parent;

        if ($businessCaseItem->isAllFilled()) {
            $button->parent->createOne();
        }
    }

    public function businessCaseFormItemRemove(SubmitButton $button)
    {
        $businessCaseItem = $button->parent->parent;
        $businessCaseItem->remove($button->parent, TRUE);
    }
?>
<?php
public function actionEdit($id)
    {
        $this->id = $id;

        if ($id) {
            $businessCase = $this->businessCaseRepository->get($id);
            $businessItem = $this->businessCaseItemRepository->get($id);
            $this->template->file = $businessCase->attachment;

            $i = 0;
            foreach ($businessItem as $item) {
                $this['businessCaseForm']['businessCaseItems'][$i]->setDefaults($item);
                $i++;
            }

            $this['businessCaseForm']->setDefaults($businessCase);
            $this['businessCaseForm']['attachment']->setOption('description', $businessCase->attachment)->setRequired(false);
            $this['businessCaseForm']['date_created']->setDefaultValue($businessCase->date_created->format('Y-m-d'));
            $this['businessCaseForm']['due_date']->setDefaultValue($businessCase->due_date->format('Y-m-d'));
        } else {
            $this->error('Faktura nebyla nalezena');
        }
    }
?>

Editoval kiCkZ (12. 4. 2018 20:36)

kiCkZ
Člen | 153
+
0
-

Tak pokud by měl někdo podobný problém, tak je nutné upravit ten foreach takto:

<?php

$i = 0;
$items = [];
foreach ($businessItem as $item) {
   $items[$i] = $item;
   $i++;
}
$this['businessCaseForm']['businessCaseItems']->setDefaults($items);
?>

Editoval kiCkZ (12. 4. 2018 21:32)