Completed
Push — master ( 4de43c...7a7d43 )
by Paul
06:26
created

JediController::showFrontAction()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 7
nc 2
nop 1
1
<?php
2
3
namespace Acme\AppBundle\Controller;
4
5
use Acme\AppBundle\Entity\Jedi;
6
use Acme\AppBundle\Form\Type\JediType;
7
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
8
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
9
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
10
use Symfony\Component\HttpFoundation\Request;
11
use Victoire\Bundle\CoreBundle\Controller\BackendController;
12
13
/**
14
 * Jedi controller.
15
 * Generated with generate:crud command.
16
 *
17
 * @Route("/jedi")
18
 */
19
class JediController extends BackendController
20
{
21
    /**
22
     * Lists all Jedi entities.
23
     *
24
     * @Route("/", name="acme_app_jedi_index")
25
     * @Method("GET")
26
     * @Template()
27
     */
0 ignored issues
show
introduced by
Missing @return tag in function comment
Loading history...
28 View Code Duplication
    public function indexAction()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
29
    {
30
        $em = $this->getDoctrine()->getManager();
31
32
        $entities = $em->getRepository('AcmeAppBundle:Jedi')->findAll();
33
34
        return [
35
            'entities' => $entities,
36
        ];
37
    }
38
39
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$request" missing
Loading history...
40
     * Creates a new Jedi entity.
41
     *
42
     * @Route("/", name="acme_app_jedi_create")
43
     * @Method("POST")
44
     * @Template("AcmeAppBundle:Jedi:new.html.twig")
45
     */
0 ignored issues
show
introduced by
Missing @return tag in function comment
Loading history...
46
    public function createAction(Request $request)
47
    {
48
        $entity = new Jedi();
49
        $form = $this->createCreateForm($entity);
50
        $form->handleRequest($request);
51
52
        if ($form->isValid()) {
53
            $em = $this->getDoctrine()->getManager();
54
            $em->persist($entity);
55
            $em->flush();
56
57
            return $this->redirect($this->generateUrl('acme_app_jedi_index'));
58
        }
59
60
        return [
61
            'entity' => $entity,
62
            'form'   => $form->createView(),
63
        ];
64
    }
65
66
    /**
67
     * Creates a form to create a Jedi entity.
68
     *
69
     * @param Jedi $entity The entity
70
     *
71
     * @return \Symfony\Component\Form\Form The form
72
     */
73
    private function createCreateForm(Jedi $entity)
74
    {
75
        $form = $this->createForm(JediType::class, $entity, [
76
            'action' => $this->generateUrl('acme_app_jedi_create'),
77
            'method' => 'POST',
78
        ]);
79
80
        $form->add('submit', 'submit', ['label' => 'acme.app.jedi.form.button.create']);
81
82
        return $form;
83
    }
84
85
    /**
86
     * Displays a form to create a new Jedi entity.
87
     *
88
     * @Route("/new", name="acme_app_jedi_new")
89
     * @Method("GET")
90
     * @Template()
91
     */
0 ignored issues
show
introduced by
Missing @return tag in function comment
Loading history...
92
    public function newAction()
0 ignored issues
show
introduced by
Declare public methods first,then protected ones and finally private ones
Loading history...
93
    {
94
        $entity = new Jedi();
95
        $form = $this->createCreateForm($entity);
96
97
        return [
98
            'entity' => $entity,
99
            'form'   => $form->createView(),
100
        ];
101
    }
102
103
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$id" missing
Loading history...
104
     * Finds and displays a Jedi entity.
105
     *
106
     * @Route("/{id}", name="acme_app_jedi_show")
107
     * @Method("GET")
108
     * @Template()
109
     */
0 ignored issues
show
introduced by
Missing @return tag in function comment
Loading history...
110
    public function showAction($id)
111
    {
112
        $em = $this->getDoctrine()->getManager();
113
114
        $entity = $em->getRepository('AcmeAppBundle:Jedi')->find($id);
115
116
        if (!$entity) {
117
            throw $this->createNotFoundException('Unable to find Jedi entity.');
118
        }
119
120
        $deleteForm = $this->createDeleteForm($id);
121
122
        return [
123
            'entity'      => $entity,
124
            'delete_form' => $deleteForm->createView(),
125
        ];
126
    }
127
128
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$id" missing
Loading history...
129
     * Displays a form to edit an existing Jedi entity.
130
     *
131
     * @Route("/{id}/edit", name="acme_app_jedi_edit")
132
     * @Method("GET")
133
     * @Template()
134
     */
0 ignored issues
show
introduced by
Missing @return tag in function comment
Loading history...
135
    public function editAction($id)
136
    {
137
        $em = $this->getDoctrine()->getManager();
138
139
        $entity = $em->getRepository('AcmeAppBundle:Jedi')->find($id);
140
141
        if (!$entity) {
142
            throw $this->createNotFoundException('Unable to find Jedi entity.');
143
        }
144
145
        $editForm = $this->createEditForm($entity);
146
        $deleteForm = $this->createDeleteForm($id);
147
148
        return [
149
            'entity'      => $entity,
150
            'edit_form'   => $editForm->createView(),
151
            'delete_form' => $deleteForm->createView(),
152
        ];
153
    }
154
155
    /**
156
     * Creates a form to edit a Jedi entity.
157
     *
158
     * @param Jedi $entity The entity
159
     *
160
     * @return \Symfony\Component\Form\Form The form
161
     */
162
    private function createEditForm(Jedi $entity)
163
    {
164
        $form = $this->createForm(JediType::class, $entity, [
165
            'action' => $this->generateUrl('acme_app_jedi_update', ['id' => $entity->getId()]),
166
            'method' => 'PUT',
167
        ]);
168
169
        $form->add('submit', 'submit', ['label' => 'acme.app.jedi.form.button.update']);
170
171
        return $form;
172
    }
173
174
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$request" missing
Loading history...
introduced by
Doc comment for parameter "$id" missing
Loading history...
175
     * Edits an existing Jedi entity.
176
     *
177
     * @Route("/{id}", name="acme_app_jedi_update")
178
     * @Method("PUT")
179
     * @Template("AcmeAppBundle:Jedi:edit.html.twig")
180
     */
0 ignored issues
show
introduced by
Missing @return tag in function comment
Loading history...
181
    public function updateAction(Request $request, $id)
0 ignored issues
show
introduced by
Declare public methods first,then protected ones and finally private ones
Loading history...
182
    {
183
        $em = $this->getDoctrine()->getManager();
184
185
        $entity = $em->getRepository('AcmeAppBundle:Jedi')->find($id);
186
187
        if (!$entity) {
188
            throw $this->createNotFoundException('Unable to find Jedi entity.');
189
        }
190
191
        $deleteForm = $this->createDeleteForm($id);
192
        $editForm = $this->createEditForm($entity);
193
        $editForm->handleRequest($request);
194
195
        if ($editForm->isValid()) {
196
            $em->flush();
197
198
            return $this->redirect($this->generateUrl('acme_app_jedi_index'));
199
        }
200
201
        return [
202
            'entity'      => $entity,
203
            'edit_form'   => $editForm->createView(),
204
            'delete_form' => $deleteForm->createView(),
205
        ];
206
    }
207
208
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$request" missing
Loading history...
introduced by
Doc comment for parameter "$id" missing
Loading history...
209
     * Deletes a Jedi entity.
210
     *
211
     * @Route("/{id}", name="acme_app_jedi_delete")
212
     * @Method("DELETE")
213
     */
0 ignored issues
show
introduced by
Missing @return tag in function comment
Loading history...
214
    public function deleteAction(Request $request, $id)
215
    {
216
        $form = $this->createDeleteForm($id);
217
        $form->handleRequest($request);
218
219
        if ($form->isValid()) {
220
            $em = $this->getDoctrine()->getManager();
221
            $entity = $em->getRepository('AcmeAppBundle:Jedi')->find($id);
222
223
            if (!$entity) {
224
                throw $this->createNotFoundException('Unable to find Jedi entity.');
225
            }
226
227
            $em->remove($entity);
228
            $em->flush();
229
        }
230
231
        return $this->redirect($this->generateUrl('acme_app_jedi_index'));
232
    }
233
234
    /**
235
     * Creates a form to delete a Jedi entity by id.
236
     *
237
     * @param mixed $id The entity id
238
     *
239
     * @return \Symfony\Component\Form\Form The form
240
     */
241
    private function createDeleteForm($id)
242
    {
243
        return $this->createFormBuilder(null, [
0 ignored issues
show
Bug introduced by
It seems like you code against a specific sub-type and not the parent class Symfony\Component\Form\FormConfigBuilder as the method add() does only exist in the following sub-classes of Symfony\Component\Form\FormConfigBuilder: Symfony\Component\Form\FormBuilder. Maybe you want to instanceof check for one of these explicitly?

Let’s take a look at an example:

abstract class User
{
    /** @return string */
    abstract public function getPassword();
}

class MyUser extends User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the parent class:

    abstract class User
    {
        /** @return string */
        abstract public function getPassword();
    
        /** @return string */
        abstract public function getDisplayName();
    }
    
Loading history...
244
                'translation_domain' => 'victoire',
245
            ])
0 ignored issues
show
Coding Style introduced by
This line of the multi-line function call does not seem to be indented correctly. Expected 8 spaces, but found 12.
Loading history...
246
            ->setAction($this->generateUrl('acme_app_jedi_delete', ['id' => $id]))
247
            ->setMethod('DELETE')
248
            ->add('submit', 'submit', ['label' => 'acme.app.jedi.form.button.delete'])
249
            ->getForm();
250
    }
251
252
    /**
253
     * Lists all Jedi entities for front display.
254
     *
255
     * @Route("/front/index", name="acme_app_jedi_front_index")
256
     * @Method("GET")
257
     * @Template()
258
     */
0 ignored issues
show
introduced by
Missing @return tag in function comment
Loading history...
259 View Code Duplication
    public function indexFrontAction()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
introduced by
Declare public methods first,then protected ones and finally private ones
Loading history...
260
    {
261
        $em = $this->getDoctrine()->getManager();
262
263
        $entities = $em->getRepository('AcmeAppBundle:Jedi')->findAll();
264
265
        return [
266
            'entities' => $entities,
267
        ];
268
    }
269
270
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$id" missing
Loading history...
271
     * Finds and displays a Jedi entity for front display.
272
     *
273
     * @Route("/front/show/{id}", name="acme_app_jedi_front_show")
274
     * @Method("GET")
275
     * @Template()
276
     */
0 ignored issues
show
introduced by
Missing @return tag in function comment
Loading history...
277
    public function showFrontAction($id)
278
    {
279
        $em = $this->getDoctrine()->getManager();
280
281
        $entity = $em->getRepository('AcmeAppBundle:Jedi')->find($id);
282
283
        if (!$entity) {
284
            throw $this->createNotFoundException('Unable to find Jedi entity.');
285
        }
286
287
        return [
288
            'entity' => $entity,
289
        ];
290
    }
291
}
292