SYMFONY 3.4

Dans MVC, il y a V

Par Charles-Édouard Coste / @charly@occitanie.social

3615 Mavie...

Charles-Édouard Coste

  • Développeur fullstack
  • Consultant en logiciel libre
  • Consultant en accessibilité web
  • Ingénieur qualité
Certification Opquast avancé

Me contacter...

Le bon vieux mail : contact@ccoste.fr

Droits d'auteurs

Cette présentation est sous licence CC BY-SA 4.0

Vous êtes autorisés à la...
Partager
Adapter
Selon les conditions suivantes :
Attribution
Partage dans les Mêmes Conditions

Un contrôleur Symfony


namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class DefaultController
{
    //...
    public function indexAction()
    {
        // Retourne un objet réponse
        return new Response(
            '<html><body><p>Hello world</p></body></html>'
        );
    }
}
            

Un autre contrôleur Symfony


namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class DefaultController
{
    //...
    public function indexAction()
    {
        $name = 'Snoopy';
        // Retourne un objet réponse
        return $this->render('hello.html.twig', $name);
    }
}
            

Négociation de contenu


//...
public function indexAction(Request $request)
{
    $types = $request->getAcceptableContentTypes();
    $result = ['name' => 'Snoopy'];

    if (in_array('text/html', $types) {

        return $this->render('hello.html.twig', $result);

    } elseif(in_array('application/json', $types) {

        return $this->json($result);
    }
}
            

Un ancêtre de Symfony

"Réponse" VS "Résultat"

Exemple de la calculatrice

Combien font 1 + 2 ?

Le "résultat" :

3

La "réponse" :


               <html><body><p>Le résultat est : 3</p></body></html>
           

Autre "réponse" :

{"value": 3}

Événement kernel.view


//...
class MyView implements EventSubscriberInterface
{
    public function onKernelView(GetResponseForControllerResultEvent $event)
    {
        $result = $event->getControllerResult();
        $types = $event->getRequest()->getAcceptableContentTypes();

        if (in_array('text/html', $types) {

            $response = new Response('hello.html.twig', $result);

        } elseif(in_array('application/json', $types) {

            $response = new JsonResponse($result);
        }

        $event->setResponse($response);
    }

    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::VIEW => 'onKernelView',
        ];
    }
}

Nouveau contrôleur


public function indexAction()
{
    return [
        'name' => 'Snoopy'
    ];
}

Merci à tous

- Événement Kernel.view (documentation)
- Événement Kernel.view (knpuniversity)
- eZComponents MvcTools