2014-09-17 3 views
4

J'utilise SonataAdminBundle pour mon projet et je souhaite remplacer un bloc.Symfony2 Remplacer une partie du modèle d'un ensemble tiers

Si je crée un modèle dans app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig vider le cache et le faire:

{% extends 'SonataAdminBundle::standard_layout.html.twig' %} 

{% block theBlockIWantToOverride %} 
{% endblock %} 

J'obtiens une erreur Maximum function nesting level of '250' reached, aborting!.

Si je supprime la pièce extends, cela rend une page vierge. Au lieu de cela, je dois copier le contenu entier du fichier dans ce nouveau fichier, puis modifier le contenu du bloc. Je sais que c'est comme ça que fonctionne Symfony2, je ne sais pas s'il y a une solution de contournement sans avoir tout le code là-bas?

La raison pour laquelle je veux faire ceci est parce que j'utilise SensioLabsInsight et il m'embête à propos du filtre de brindille raw que SonataAdminBundle utilise. Je sais que je peux juste ignorer l'avertissement, mais il se sent mal.

Aussi, j'essayé de remplacer le faisceau en créant un faisceau php app/console generate:bundle puis dans src/fournisseur/AdminBundle/VendorAdminBundle.php I ajouté:

/** 
* {@inheritdoc} 
*/ 
public function getParent() 
{ 
    return 'SonataAdminBundle'; 
} 

et fait le procédé ci-dessus, ajouté une src/Vendor/AdminBundle/Vendor/Resources/views/standard_layout.html.twig qui didn ne résoudra pas le problème. Encore une fois, obtenez l'erreur de niveau d'imbrication.

Répondre

5

Le modèle à app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig étend SonataAdminBundle::standard_layout.html.twig qui est le même fichier, ce qui signifie qu'il est tout simplement se prolonge jusqu'à ce qu'il meurt.

Vous devez copier le contenu du fichier et modifier ce dont vous avez besoin.

Sinon, vous pouvez copier le standard_layout.html.twig original et le renommer (à standard_base.html.twig par exemple), puis remplacer vos blocs dans votre version de standard_layout.html.twig puis prolonger votre standard_base.html.twig.

Encore plus encore, et mieux pour SonataAdminBundle, vous pouvez utiliser un autre modèle nommé (VendorAdminBundle::standard_layout_override.html.twig par exemple) que votre version du standard_template.html.twig d'étendre l'original et le mettre dans la configuration comme ...

sonata_admin: 
    templates: 
     layout: VendorAdminBundle::standard_layout_override.html.twig 
+0

cela fonctionne! Je ne sais pas comment je n'ai pas pensé à ça!Merci de m'avoir aidé à avancer avec ça! –

1

Avec la façon dont vous essayez:

  1. Vous devez copier le contenu du fichier d'origine
  2. coller le contenu dans app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig
  3. Override [| modifier] le bloc que vous souhaitez
  4. ne pas besoin d'ajouter {% extends 'SonataAdminBundle::standard_layout.html.twig' %}

Avec le doc: http://sonata-project.org/bundles/admin/master/doc/reference/templates.html

Extrait:

sonata_admin: 
    templates: 
     layout: SonataAdminBundle::standard_layout.html.twig 
     ajax: SonataAdminBundle::ajax_layout.html.twig 
     list: SonataAdminBundle:CRUD:list.html.twig 
     show: SonataAdminBundle:CRUD:show.html.twig 
     edit: SonataAdminBundle:CRUD:edit.html.twig 
     history: SonataAdminBundle:CRUD:history.html.twig 
     preview: SonataAdminBundle:CRUD:preview.html.twig 
     delete: SonataAdminBundle:CRUD:delete.html.twig 
     batch: SonataAdminBundle:CRUD:list__batch.html.twig 
     acl:  SonataAdminBundle:CRUD:acl.html.twig 
     action: SonataAdminBundle:CRUD:action.html.twig 
     select: SonataAdminBundle:CRUD:list__select.html.twig 
     filter: SonataAdminBundle:Form:filter_admin_fields.html.twig 
     dashboard:   SonataAdminBundle:Core:dashboard.html.twig 
     search:    SonataAdminBundle:Core:search.html.twig 
     batch_confirmation: SonataAdminBundle:CRUD:batch_confirmation.html.twig 
+0

Doc réel: https://symfony.com/doc/current/bundles/SonataAdminBundle/reference/templates.html –

Questions connexes