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

Par Philippe Le Van (twitter accountplv) Dernière mise à jour : 22 May 2014

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
hey there and thank you for your information – I have certainly picked up something new from right here.
I did however expertise a few technical points using this site, as 
I experienced to reload the web site a lot of times 
previous to I could get it to load correctly. I had been wondering if your hosting 
is OK? Not that I am complaining, but sluggish loading instances times will very frequently affect your placement in google and 
could damage your high quality score if advertising and marketing with Adwords.
Well I am adding this RSS to my email and could 
look out for much more of your respective fascinating 
content. Make sure you update this again very soon.
demande
bonjour 
comment je peux utiliser une vue sql dans une application Symfony
sf2Console GUI
Super ce petit recueil !
Sinon j'ai développer un petit script bash pour gérer les principales commandes Symfony2 :
http://clxu.eu/sf2console
Exception
Salut, est il possible d'avoir la liste complète des exceptions existantes svp ? :)
Envoyer les modifs des entités Doctrine aà la base de données
# géneration des commandes SQL suite aux modification de l'entité
php app/console doctrine:schema:update --dump-sql

# envoyer les modif SQL à la base :
php app/console doctrine:schema:update --force
Génerer ses entités à partir d'une base existante
How to generate Entities from an Existing Database
http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
Ajout
Une proposition d'ajout à ce bien utile aide mémoire, et vu que je m'en sers, je saurais où la retrouver facilement ^^
Ajout Aide mémoire doctrine : Générer le CRUD d'une entités
# générer les vues et controleurs CRUD d'une entité
php app/console generate:doctrine:crud
merci
Très bonne synthèse!, il est vrai "qu'on passe notre vie à chercher/rechercher ces infos dans la doc de sf2"