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
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"