Savoir s'il s'agit d'une requête Ajax :
$this->get('request')->isXmlHttpRequest()
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/*' %} <script src="{{ asset_url }}"></script> {% endjavascripts %}
{% stylesheets '@AcmeFooBundle/Resources/public/main.css' '@AcmeFooBundle/Resources/public/css/*' %} <link rel="stylesheet" href="{{ asset_url }}" /> {% endstylesheets %}
Leur copie/déploiement se fait avec la commande :
php app/console assets:install web # en dev ? php app/console assetic:dump
Définir ses propres méthodes de requêtage :
Créer son repository dans src/application/bundle/Repository/XRepository.php Exemple :
<?php namespace NomApplication\NomBundle\Repository; use Doctrine\ORM\EntityRepository; class XRepository extends EntityRepository { public function findAllOrderedByName() { return $this->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
Créer un lien relatif (a) : path
{{ path('<nom de la route telle que définie dans routing.yml>', { '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') %}
<!-- Je suis Administrateur -->
{% endif %}
Alterner les classes/couleurs lors d'un for Twig :
<table> {% for element in collection %} <tr class="{{ cycle(['even', 'odd'], loop.index) }}"> <td>{{ element.name }}</td> </tr> {% endfor %} </table>
À 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') %} <div class="flash-notice">{{ app.session.flash('notice') }}</div> {% endif %}
tar xzf ~/Downloads/Symfony_Standard_2.0.12.tgz -C ~/www/
cd ~/www/Symfony
php bin/vendors install
sudo vi /etc/apache2/vhosts.d/default_vhost.include
chmod 0777 app/cache chmod 0777 app/logs
cd ~/www/Symfony/
hg init
LICENSE README.md .lock web/bundles/ app/bootstrap* app/cache/* app/logs/* vendor/ app/config/parameters.ini
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).
Comme expliqué dans la documentation de Doctrine, à moins de remapper ces types pour Doctrine, il ne faut pas conserver les microsecondes. Ainsi :
ALTER TABLE <nom de la table> ALTER COLUMN <nom de la colonne> TYPE TIMESTAMP(0);