Nous avons deux solutions pour ce faire, nous choisissons de ne pas utilsier l'heritage de bundle, pour plus d'info sur cette seconde solution : https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_templates.md cf solution b).
En créant app/Resources/FOSUserBundle/views/layout.html.twig
nous écrasons le layout par defaut de FOSUserBundle, ceci étant vallable pour n'importe quel autre bundle
Voici le fichier :
{% extends 'IIMBlogBundle::layout.html.twig' %}
{% block content %}
<div>
{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
{{ 'layout.logged_in_as'|trans({'%username%': app.user.username}, 'FOSUserBundle') }} |
<a href="{{ path('fos_user_security_logout') }}">
{{ 'layout.logout'|trans({}, 'FOSUserBundle') }}
</a>
{% else %}
<a href="{{ path('fos_user_security_login') }}">{{ 'layout.login'|trans({}, 'FOSUserBundle') }}</a>
{% endif %}
</div>
{% for type, messages in app.session.flashbag.all() %}
{% for key, message in messages %}
<div class="flash-{{ type }}">
{{ message|trans({}, 'FOSUserBundle') }}
</div>
{% endfor %}
{% endfor %}
<div>
{% block fos_user_content %}
{% endblock fos_user_content %}
</div>
{% endblock content %}
Dans src/IIM/BlogBundle/Resources/views/layout.html.twig
nous créons notre layout qui sera utilisé par le layout créé précédemment ainssi que par tous nos autre vues.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
{% stylesheets
'@IIMBlogBundle/Resources/public/css/*'
filter='cssrewrite'
%}
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
{% endstylesheets %}
{%javascripts
'@IIMBlogBundle/Resources/public/js/*'
%}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
</head>
<body>
{% block content %}
{% endblock content %}
</body>
</html>
Les autre vus de votre BlogBundle doivent hériter de layout
{% extends 'IIMBlogBundle::layout.html.twig' %}
N'oubliez pas d'activez les assets pour votre bundle dans config.yml
assetic:
debug: "%kernel.debug%"
use_controller: false
bundles: [IIMBlogBundle]
filters:
cssrewrite: ~
Ajoutez vos css ou js dans src/IIM/BlogBundle/Resources/public/js
et src/IIM/BlogBundle/Resources/public/css
Ensuite mettez à jour vos assets à la console :
app/console assetic:dump
Cela dumpera dans le dossier web/bundles/...
, ne modifiez jamais les fichiers à cet endroit, vous devez travailler dans votre bundle et dumper les assets à chaque modification.
Pour éviter de relancer la comande en permanance, faite :
app/console assetic:dump --watch
La commande restera "ouverte" et bloquera votre terminal, à chaque changement de js ou css dans votre Bundle les fichiers seront automatiquement dumpés.
Elle seront elles aussi dumpés dans web/bundles/
, trouvez le lien direct, vous ne pourrez et devez pas mettre un lien vers le dossier BlogBundle\Resources\image
Il peut être necessaire de suprimer le cache même si vous êtes en app_dev.php
,
Pour que l'assetic bundle prenne en compte l'ajout du bundle dans la config (à faire une fois uniquement donc)
app/console cache:clear
Attention au path, normalement votre serveur HTTP pointe sur le dossier web, ce n'est pas le cas sur vos install locale, attention avec les url absolue dans le css donc.