framework-web:symfony:controllers

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
framework-web:symfony:controllers [2018/01/30 02:30] – créée jcheronframework-web:symfony:controllers [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 8: Ligne 8:
 namespace App\Controller; namespace App\Controller;
  
-use Symfony\Bundle\FrameworkBundle\Controller\Controller;+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  
-- class LuckyController +class LuckyController extends Controller
-class LuckyController extends Controller+
 { {
     // ...     // ...
 } }
 +</sxh>
 +
 +===== Opérations courantes =====
 +
 +==== Génération d'urls ====
 +
 +<sxh php>
 +$url = $this->generateUrl('app_lucky_number', array('max' => 10));
 +</sxh>
 +
 +==== Redirections ====
 +
 +<sxh php>
 +use Symfony\Component\HttpFoundation\RedirectResponse;
 +
 +// ...
 +public function index()
 +{
 +    // redirect to the "homepage" route
 +    return $this->redirectToRoute('homepage');
 +
 +    // redirectToRoute is a shortcut for:
 +    // return new RedirectResponse($this->generateUrl('homepage'));
 +
 +    // do a permanent - 301 redirect
 +    return $this->redirectToRoute('homepage', array(), 301);
 +
 +    // redirect to a route with parameters
 +    return $this->redirectToRoute('app_lucky_number', array('max' => 10));
 +
 +    // redirect externally
 +    return $this->redirect('http://symfony.com/doc');
 +}
 +</sxh>
 +
 +==== Appel d'un template ====
 +
 +<sxh php>
 +// renders templates/lucky/number.html.twig
 +return $this->render('lucky/number.html.twig', array('name' => $name));
 +</sxh>
 +
 +
 +==== Appel de services ====
 +
 +L'utilisation d'un service peut se faire par injection de dépendances :
 +
 +<sxh php>
 +use Psr\Log\LoggerInterface
 +// ...
 +
 +/**
 + * @Route("/lucky/number/{max}")
 + */
 +public function number($max, LoggerInterface $logger)
 +{
 +    $logger->info('We are logging!');
 +    // ...
 +}
 +</sxh>
 +
 +
 +La commande suivante liste les services directement injectables :
 +
 +<sxh bash;gutter:false>
 +php bin/console debug:autowiring
 +</sxh>
 +
 +
 +==== L'objet Request ====
 +
 +L'objet **request** est utilisable par injection de dépendance :
 +
 +<sxh php>
 +use Symfony\Component\HttpFoundation\Request;
 +
 +public function index(Request $request, $firstName, $lastName)
 +{
 +    $page = $request->query->get('page', 1);
 +
 +    // ...
 +}
 +</sxh>
 +
 +
 +
 +ou en utilisant la méthode statique :
 +
 +<sxh php>
 +$request = Request::createFromGlobals();
 +</sxh>
 +
 +==== L'objet Session ====
 +
 +L'utilisation de la session se fait par injection de dépendance d'une instance de **SessionInterface** :
 +
 +<sxh php>
 +use Symfony\Component\HttpFoundation\Session\SessionInterface;
 +
 +public function index(SessionInterface $session){
 +    // store an attribute for reuse during a later user request
 +    $session->set('foo', 'bar');
 +
 +    // get the attribute set by another controller in another request
 +    $foobar = $session->get('foobar');
 +
 +    // use a default value if the attribute doesn't exist
 +    $filters = $session->get('filters', array());
 +}
 +</sxh>
 +
 +==== Flash messages ====
 +
 +Les Flash messages permettent de communiquer des notifications à l'utilisateur. Ils sont stockés en session, et supprimés automatiquement après leur utilisation (get) :
 +
 +Exemple d'utilisation de création de flash message lors de l'envoi d'un formulaire :
 +<sxh php>
 +use Symfony\Component\HttpFoundation\Request;
 +
 +public function update(Request $request)
 +{
 +    // ...
 +
 +    if ($form->isSubmitted() && $form->isValid()) {
 +        // do some sort of processing
 +
 +        $this->addFlash(
 +            'notice',
 +            'Your changes were saved!'
 +        );
 +        // $this->addFlash() is equivalent to $request->getSession()->getFlashBag()->add()
 +
 +        return $this->redirectToRoute(...);
 +    }
 +
 +    return $this->render(...);
 +}
 +</sxh>
 +
 +
 +Affichage des flash messages dans un template :
 +
 +<sxh html>
 +{# templates/base.html.twig #}
 +
 +{# you can read and display just one flash message type... #}
 +{% for message in app.flashes('notice') %}
 +    <div class="flash-notice">
 +        {{ message }}
 +    </div>
 +{% endfor %}
 +
 +{# ...or you can read and display every flash message available #}
 +{% for label, messages in app.flashes %}
 +    {% for message in messages %}
 +        <div class="flash-{{ label }}">
 +            {{ message }}
 +        </div>
 +    {% endfor %}
 +{% endfor %}
 </sxh> </sxh>
  
  • framework-web/symfony/controllers.1517275827.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)