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’un serveur en local

# installer le bundle
composer require symfony/web-server-bundle --dev
# lancer le serveur
php bin/console server:start

Création de la bdd symfony

# créer la base de données une seule fois seulement
php app/console doctrine:database:create

Création de la bdd symfony

# créer la base de données une seule fois seulement
php app/console doctrine:database:create

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 getters et setters d'une entité
php 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)
# une fois que l'on a créer les fixtures à la main, il faut loader les fixtures dans doctrine
php app/console doctrine:fixtures:load
# générer le formulaire d'une entité
php app/console doctrine:generate:form TutoAnimauxBundle:Animal

Composer

Mettre à jour Composer lui-même
php composer.phar self-update
Installer Composer dans le dossier www en vue d'une installation de Symfony avec Composer
C:\wamp\www> php -r "eval('?>'.file_get_contents('http://getcomposer.org/installer'));"

Installer Symfony avec Composer
C:\wamp\www> composer create-project symfony/framework-standard-edition my_project_name
Composer sert à installer de nouvelles dépendances (bundles). Le fichier composer.json contient la bibliothèque de toutes les dépendances (bundles) installées
Pour rajouter une dépendance, il faut la rajouter dans require du fichier composer.json et la rajouter aussi dans le fichier AppKernel
 
# installer ou mettre à jour toutes les dépendances(attention on ne met pas de app/console avec composer)
$ php composer.phar update
ou
$ composer update
# voir les commandes de composer (attention on ne met pas de app/console avec composer)
$ php composer.phar --help ou -h
ou
$ composer --help ou -h
# voir la version de composer (attention on ne met pas de app/console avec composer)
php composer.phar --version ou -v
ou
$composer --version ou -v

# Mettre à jour composer (attention on ne met pas de app/console avec composer)
$ php composer.phar self-update
ou
$ composer self-update

# Télécharger un seul bundle (attention on ne met pas de app/console avec composer)
$ php composer.phar update friendsofsymfony/rest-bundle (en ayant au préalable inscrit le bundle et la version souhaitée dans le composer.json)
ou
$ composer require friendsofsymfony/rest-bundle(téléchargement automatique du bundle)

Debug

# voir toutes les routes
php app/console router:debug
 
# effacer le cache
php app/console cache:clear

# effacer le cache en mode production
php app/console cache:clear --env=prod
# voir la liste des services
php app/console debug:container

# lister tous les services implémentant un certain tag pour les interfaces (et non pas nomduservice)
php app/console debug:container --tag=twig.extension

# avoir les informations sur un service en particulier
php app/console debug:container serializer

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

Installer les assets css js et images

Une fois les modifications apportés dans le dossier public il faut copier ces fichiers dans le dossier web pour que ces modfications s’affichent à l’écran:

$ php app/console assets :install

Comme c’est une tâche répétitive, Symfony met à disposition les liens symboliques du dossier web simplement en ouvrant la commande en mode administrateur:

$ php app/console assets:install web –symlink

Cela aura pour effet de créer des liens symboliques automatiquement et vous n’aurez plus à installer les assets à chaque modification

pour compiler un fichier main.css

$ php app/console assetic:dump

Share Button