====== Contrôleur ====== Savoir s'il s'agit d'une requête Ajax : $this->get('request')->isXmlHttpRequest() ====== Ressources liées (JS, CSS, images, etc) ====== Les placer dans le sous-répertoire Resources/public/ du Bundle (avec éventuellement d'autres sous-répertoires). Et côté Twig, les référencer par : href="{{ asset('@NomDuBundle/Resources/public/...') }}" Pour les fichiers JS et CSS, on peut déclarer ces fichiers annexes d'un coup, sous formes de tableau et/ou employer un motif type glob : {% javascripts '@AcmeFooBundle/Resources/public/js/thirdparty/jquery.js' '@AcmeFooBundle/Resources/public/js/*' %} {% endjavascripts %} {% stylesheets '@AcmeFooBundle/Resources/public/main.css' '@AcmeFooBundle/Resources/public/css/*' %} {% endstylesheets %} Leur copie/déploiement se fait avec la commande : php app/console assets:install web # en dev ? php app/console assetic:dump ====== Modèle ====== Définir ses propres méthodes de requêtage : Créer son repository dans src/**application**/**bundle**/Repository/XRepository.php Exemple : getEntityManager() ->createQuery('SELECT x FROM NomApplication\NomBundle\Entity\X x ORDER BY x.nom ASC') ->getResult(); } } Puis faire le lien au niveau de l'entité par une annotation, src/**application**/**bundle**/Entity/X.php : @ORM\Entity(repositoryClass="NomApplication\NomBundle\Repository\XRepository") (commentaire avant la classe) Mettre à jour les tables : cd .../Symfony php app/console doctrine:schema:update --force ====== Vue (Twig) ====== Créer un lien relatif (a) : path {{ path('', { 'param1': 'valeur1', 'param2': 'valeur2' }) }} Pour un lien absolu, utiliser la fonction url. Inclure des css, image, js, etc : asset {{ asset('css/style.css') }} Affichage en fonction du rôle de l'utilisateur : is_granted {% if is_granted('ROLE_ADMIN') %} {% endif %} Alterner les classes/couleurs lors d'un for Twig : {% for element in collection %} {% endfor %}
{{ element.name }}
====== Messages flash ====== À définir dans le contrôleur : $this->get('session')->setFlash('notice', 'Congratulations, your action succeeded!'); L'afficher dans la vue (Twig) : {% if app.session.hasFlash('notice') %}
{{ app.session.flash('notice') }}
{% endif %}
====== Installer Symfony2 ====== * Télécharger Symfony2 (without vendors pour les gérer avec git) * Mon répertoire d'installation est /home/julp/www/, fichier télécharger dans ~/Downloads/ :tar xzf ~/Downloads/Symfony_Standard_2.0.12.tgz -C ~/www/ * Déplaçons nous vers ~/www/Symfony :cd ~/www/Symfony * Si on n'a pas pris les vendors, les installer :php bin/vendors install * éditer la configuration d'Apache (Arborescence Gentoo):sudo vi /etc/apache2/vhosts.d/default_vhost.include * Pour modifier : * DocumentRoot "/var/www/localhost/htdocs" en DocumentRoot "/home/julp/www/Symfony/web" * en * (optionnel) Supprimer le Indexes ou ajouter un moins devant à la ligne Options * (optionnel) Ajouter une ligne DirectoryIndex app_dev.php dans le bloc * Ici, étant donné qu'on travaille sur le home, il faut modifier quelques permissions (vu que c'est en local, inutile de s'enquiquiner avec des acl) :chmod 0777 app/cache chmod 0777 app/logs ====== Versionner son projet Symfony2 avec Mercurial ====== * ça doit être fait du répertoire Symfony :cd ~/www/Symfony/ * initialiser le dépôt :hg init * créer le fichier (~/www/Symfony/).hgignore à la racine tel que (syntaxe glob) :LICENSE README.md .lock web/bundles/ app/bootstrap* app/cache/* app/logs/* vendor/ app/config/parameters.ini * par exemple, pour faire un premier commit après avoir supprimé Acme et ajouter .hgignore :rm -rf src/Acme rm -rf web/bundles/acmedemo hg add app/AppKernel.php app/config/routing_dev.yml .hgignore hg commit # un éditeur sera ouvert pour écrire le message hg push Dans l'autre sens, il suffit de hg clone (avec . en destination - le répertoire doit être vide) puis d'installer Symfony (sans écraser les fichiers existants). ====== Doctrine, PostgreSQL et types date/heure ====== Comme expliqué dans [[http://readthedocs.org/docs/doctrine-dbal/en/2.0.x/reference/known-vendor-issues.html|la documentation de Doctrine]], à moins de remapper ces types pour Doctrine, il ne faut pas conserver les microsecondes. Ainsi : * TIMESTAMP devient TIMESTAMP(0)ALTER TABLE ALTER COLUMN TYPE TIMESTAMP(0); * TIME devient TIME(0)