$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 %}
{{ element.name }}
{% endfor %}
====== 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"
* 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)