Test Failed
Push — develop ( f6d190...8ff4ed )
by Daniel
04:04
created

FormPatchAction::__invoke()   A

Complexity

Conditions 6
Paths 4

Size

Total Lines 27
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 18
nc 4
nop 2
dl 0
loc 27
rs 9.0444
c 0
b 0
f 0
1
<?php
2
3
namespace Silverback\ApiComponentBundle\Controller;
4
5
use Silverback\ApiComponentBundle\Entity\Component\Form\Form;
6
use Silverback\ApiComponentBundle\DTO\Form\FormView;
7
use Symfony\Component\HttpFoundation\Request;
8
use Symfony\Component\HttpFoundation\Response;
9
10
class FormPatchAction extends AbstractFormAction
11
{
12
    /**
13
     * @param Request $request
14
     * @param Form $data
15
     * @return Response
16
     */
17
    public function __invoke(Request $request, Form $data)
18
    {
19
        $contentType = $request->headers->get('CONTENT_TYPE');
20
        $_format = $request->attributes->get('_format') ?: $request->getFormat($contentType);
21
22
        $form = $this->formFactory->create($data);
23
        $formData = $this->deserializeFormData($form, $request->getContent());
24
        $form->submit($formData, false);
25
26
        $dataCount = \count($formData);
27
        if ($dataCount === 1) {
28
            $data->setForm(new FormView($form->get(key($formData))->createView()));
29
            return $this->getResponse($data, $_format, $this->getFormValid($data->getForm()));
30
        }
31
32
        $datum = [];
33
        $valid = true;
34
        foreach ($formData as $key => $value) {
35
            $dataItem = clone $data;
36
            $dataItem->setForm(new FormView($form->get($key)->createView()));
37
            $datum[] = $dataItem;
38
            if ($valid && !$this->getFormValid($dataItem->getForm())) {
39
                $valid = false;
40
            }
41
        }
42
43
        return $this->getResponse($datum, $_format, $valid);
44
    }
45
}
46