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

FormPatchAction   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 19
dl 0
loc 34
rs 10
c 0
b 0
f 0
wmc 6

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 27 6
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