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

 plv)
plv)
                
Commentaires
Note : on ne peut plus ajouter de commentaire sur ce site