Completed
Push — master ( 9149d4...48ac62 )
by Iakov
03:51
created

AbstractBuildFormStep::getName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Kami\ApiCoreBundle\RequestProcessor\Step;
4
5
6
use Doctrine\Common\Annotations\Reader;
7
use Doctrine\Common\Util\Inflector;
8
use Kami\ApiCoreBundle\Annotation\Form;
9
use Kami\ApiCoreBundle\Security\AccessManager;
10
use Symfony\Component\Form\Extension\Core\Type\FormType;
11
use Symfony\Component\Form\FormBuilderInterface;
12
use Symfony\Component\Form\FormFactoryInterface;
13
14
abstract class AbstractBuildFormStep extends AbstractStep
15
{
16
    /**
17
     * @var FormFactoryInterface
18
     */
19
    protected $formFactory;
20
21
    /**
22
     * @var AccessManager
23
     */
24
    protected $accessManager;
25
26
    /**
27
     * @var Reader
28
     */
29
    protected $reader;
30
31
    /**
32
     * AbstractBuildFormStep constructor.
33
     *
34
     * @param FormFactoryInterface $formFactory
35
     * @param AccessManager $accessManager
36
     * @param Reader $reader
37
     */
38 6
    public function __construct(FormFactoryInterface $formFactory, AccessManager $accessManager, Reader $reader)
39
    {
40 6
        $this->formFactory = $formFactory;
41 6
        $this->accessManager = $accessManager;
42 6
        $this->reader = $reader;
43 6
    }
44
45
    /**
46
     * @return string
47
     */
48
    public function getName()
49
    {
50
        return 'generic_build_form_step';
51
    }
52
53
    /**
54
     * @return FormBuilderInterface
55
     */
56 2
    protected function getBaseFormBuilder()
57
    {
58 2
        $builder = $this->formFactory->createNamedBuilder(
59 2
            Inflector::tableize($this->getFromResponse('reflection')->getShortName()),
60 2
            FormType::class,
61 2
            $this->getFromResponse('entity'),
62 2
            ['csrf_protection' => false]
63
        );
64
65 2
        if ('PUT' === $this->request->getMethod()) {
66
            $builder->setMethod('PUT');
67
        }
68
69 2
        return $builder;
70
    }
71
72
    /**
73
     * @param \ReflectionProperty $property
74
     * @param FormBuilderInterface $builder
75
     */
76 1
    protected function addField(\ReflectionProperty $property, FormBuilderInterface $builder)
77
    {
78 1
        if ($annotation = $this->reader->getPropertyAnnotation($property, Form::class)) {
79
            $builder->add(Inflector::tableize($property->getName()), $annotation->type, $annotation->options);
80
        } else {
81 1
            $builder->add(Inflector::tableize($property->getName()));
82
        }
83
    }
84
}