Versions
07/2011 : création et ajouts divers
15/11/2011 : controlleurs
07/01/2013 : Présentation services
14/03/2013 : forward et request
19/03/2013 : flash Messages
11/06/2013 : flashbag in SF 2.3
22/05/2014 : Dump doctrine entity
Contactez-nous
Kitpages
17 rue de la Frise
38000 Grenoble
tel : 04 58 00 33 81
Aide mémoire symfony2
Introduction
Cette page contient une liste de fonctions qu'on utilise souvent dans Symfony2 et qu'on passe notre vie à rechercher dans la doc.
Création d'un bundle
# exemple d'un bundle php app/console generate:bundle --namespace=Acme/TestBundle # puis répondre aux questions
Création d'une entity
# générer une entité php app/console doctrine:generate:entity # puis répondre aux questions # générer toutes les entités d'un bundle ./app/console doctrine:generate:entities Kitpages\UserGeneratedBundle
Copier les fichiers statiques des bundles dans web/
php app/console assets:install web # utiliser --symlink pour utiliser des liens # symboliques à la place de copies
Aide mémoire doctrine
# générer les getters / setter d'une entité php app/console doctrine:generate:entities Kitpages\CmsBundle # récupérer le code SQL pour la création d'un schéma php app/console doctrine:schema:create --dump-sql # idem pour la mise à jour d'un schéma php app/console doctrine:schema:update --force #pour la mise à jour d'un schéma quand on a plusieurs entity manager php app/console doctrine:schema:update --dump-sql --em=name_entity_manager #affiche la requête $queryOrderList = $em->createQuery('SELECT o FROM KitpagesShopBundle:Order o'); echo $queryOrderList->getSQL(); # générer les vues et controleurs CRUD d'une entité php app/console generate:doctrine:crud # afficher le contenu d'une entité doctrine, sans les données du proxy \Doctrine\Common\Util\Debug::dump($myEntity)
Debug
# voir toutes les routes php app/console router:debug # effacer le cache php app/console cache:clear # voir la liste des services php app/console container:debug
Sécurité
<?php // savoir si un mec a un role if($this->get('security.context')->isGranted('ROLE_ADMIN') ) {} // savoir si un mec est authentifié (un mec peut être authentifié de façon anonyme) : $this->get('security.context')->getToken()->isAuthenticated(); // Dans un controller, récupérer le user courant : $this->get('security.context')->getToken()->getUser(); // récupérer le login du user courant $this->get('security.context')->getToken()->getUsername();
Depuis un contrôleur
<?php // récupérer l'objet request $request = $this->getRequest(); // Ajax request? $request->isXmlHttpRequest(); // quel est le langage préféré ? $request->getPreferredLanguage(array('en', 'fr')); // get a $_GET parameter $request->query->get('page'); // get a $_POST parameter $request->request->get('page'); // get a cookie parameter $request->cookies->get('page'); // get REQUEST_URI $request->getPathInfo() // récupérer l'entity manager de Doctrine $em = $this->getDoctrine()->getEntityManager(); // récupérer un paramètre de l'application // défini par exemple dans parameters.ini $param = $this->container->getParameter('my_parameter'); // récupérer la locale courante : $this->get('session')->getLocale(); // récupérer un service $service = $this->get("myService"); // récupérer le "baseUrl (+ ou - complet)" de l'appli $this->getRequest()->getBasePath(); $this->getRequest()->getBaseUrl(); // voir tous les paramètres enregistrés : var_dump($this->container->parameters); ?>
flash message
Ce sont les messages qu'on renvoie à l'utilisateur après un traitement (de formulaire par exemple).
La syntaxe a changé entre Symfony 2.1 et Symfony 2.2. Il faut maintenant passer par un flashBag. je vous laisse regarder les différences ci-dessous.
//// // add a flash message with SF 2.3 //// $this->get('session')->getFlashBag()->add( 'notice', "message content" ); /* {% if app.session.hasFlash('notice') %} <div class="flash-message flash-notice" style="display:none;"> {{ app.session.flash('notice') |nl2br }} <div class="close-button">X</div> </div> {% endif %} */ //// // add a flash message with SF <= 2.1 //// $this->get('session')->setFlash( 'notice', "Contenu du message" ); // et dans twig on aura un code du genre : /* {% if app.session.hasFlash('notice') %} <div class="flash-notice"> {{ app.session.flash('notice') }} </div> {% endif %} */
Retour d'un contrôleur
Un controlleur peut renvoyer pas mal de choses différentes :
- la sortie d'un template twig
- une redirection 302 vers une autre page
- un transfert (sans nouvelle requête) vers un autre controlleur (forward)
<?php // renvoie un template twig return $this->render( 'KitpagesShopBundle:Cart:display', array( 'cart' => $displayCart, 'cartModel' => $cart, 'cartManagerModel' => $cartManager ) ); // fait une redirection 302 vers une page return $this->redirect("/toto/titi"); // fait une redirection vers une page définie par le routeur return $this->redirect( $this->generateUrl("cart", array("key"=>$val)) ); // renvoie un texte simple vers le navigateur // penser au use Symfony\Component\HttpFoundation\Response; return new Response('My text response'); // transfère à un autre controlleur (sans changer de requête) return $this->forward('AcmeHelloBundle:Hello:fancy', array( 'name' => $name, 'color' => 'green' )); // forward en transférant à la sous-requête tous les éléments // de la requête principale $attr = $this->getRequest()->attributes; $attr->add(array("newAttribute" => "value")); return $this->forward( 'KitpagesTotoBundle:Controller:action', $attr->all(), $this->getRequest()->query->all() );
Les Services Symfony
Une liste de service qu'on utilise souvent avec la classe par défaut associée.
- translator : Symfony\Bundle\FrameworkBundle\Translation\Translator
- router : Symfony\Component\Routing\RouterInterface
- doctrine : Symfony\Bundle\DoctrineBundle\Registry
- event_dispatcher : Symfony\Component\EventDispatcher\EventDispatcherInterface
- templating : Symfony\Component\Templating\EngineInterface
- logger : Symfony\Component\HttpKernel\Log\LoggerInterface
- mailer : Swift_Mailer
- security.acl.provider : Symfony\Component\Security\Acl\Model\AclProviderInterface
- service_container : Symfony\Component\DependencyInjection\ContainerInterface
- security.context : Symfony\Component\Security\Core\SecurityContextInterface
Commentaires
Ajouter un commentaire