Skip to content

Instantly share code, notes, and snippets.

@NicolasBadey
Last active January 1, 2016 00:49
Show Gist options
  • Save NicolasBadey/8069254 to your computer and use it in GitHub Desktop.
Save NicolasBadey/8069254 to your computer and use it in GitHub Desktop.
Overriding Default FOSUserBundle Templates

Overriding Default FOSUserBundle Templates

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).

Solution en écrasant les vues d'un Bundle :

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 notre Bundle

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' %}

config

N'oubliez pas d'activez les assets pour votre bundle dans config.yml

assetic:
    debug:          "%kernel.debug%"
    use_controller: false
    bundles:        [IIMBlogBundle]
    filters:
        cssrewrite: ~

Ajouter ses CSS, js

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.

gestion des image utilisé par dans le css (background-image)`

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

Problémes possible

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment