2017-01-10 118 views
1

正如标题所示,我试图用我自己的模板来定制FOSUserBundle的模板。但它根本不起作用。我尝试了所有发现的帖子,校正了所有内容,清除了数千次缓存,仍然无法使用。从继承覆盖FOSUserBundle的模板

捆绑类的getParent:

<?php 
// src/PLL/UserBundle/PLLUserBundle.php 

namespace PLL\UserBundle; 

use Symfony\Component\HttpKernel\Bundle\Bundle; 

class PLLUserBundle extends Bundle 
{ 
    public function getParent() 
    { 
    return 'FOSUserBundle'; 
    } 
} 
?> 

模板应该覆盖FOS'之一:

{# src/PLL/UserBundle/Resources/views/layout.html.twig #} 

{% extends "PLLCoreBundle::layout.html.twig" %} 

{% block body %} 

    {% for key, messages in app.session.flashbag.all() %} 
    {% for message in messages %} 
     <div class="alert alert-{{ key }}"> 
     {{ message|trans({}, 'FOSUserBundle') }} 
     </div> 
    {% endfor %} 
    {% endfor %} 

    {% block fos_user_content %} 
    {% endblock fos_user_content %} 

{% endblock %} 

FOS”模板,那实际上是正在使用的Symfony的一个:

{# vendor/friendsofsymfony/user-bundle/Resources/views/layout.html.twig #} 

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8" /> 
    </head> 
    <body> 
     <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> 

     {% if app.request.hasPreviousSession %} 
      {% for type, messages in app.session.flashbag.all() %} 
       {% for message in messages %} 
        <div class="flash-{{ type }}"> 
         {{ message }} 
        </div> 
       {% endfor %} 
      {% endfor %} 
     {% endif %} 

     <div> 
      {% block fos_user_content %} 
      {% endblock fos_user_content %} 
     </div> 
    </body> 
</html> 

去/web/app_dev.php/login仍然显示FOS的布局,即使在删除缓存后再来一遍。无论是使用php bin/console缓存:清除,还是“手动”删除项目根目录下的var文件夹。甚至删除了我的浏览器的缓存。

更何况,扩展“PLLCoreBundle :: layout.html.twig”在我网站上的任何其他视图中完美无缺。所以我不认为它来自我的树枝模板中的错误。

情况下,他们可以帮上什么忙,

我security.yml文件:

// app/config/security.yml 

security: 
[...] 
    firewalls: 
     main: 
      pattern: ^/ 
      anonymous: true 
      provider: main 
      form_login: 
       login_path: fos_user_security_login 
       check_path: fos_user_security_check 
      logout: 
       path: fos_user_security_logout 
       target: /platform 
[...] 

应用程序的路由文件:

// app/config/routing.yml 

[...] 

fos_user_security: 
    resource: "@FOSUserBundle/Resources/config/routing/security.xml" 

fos_user_profile: 
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml" 
    prefix: /profile 

fos_user_register: 
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml" 
    prefix: /register 

fos_user_resetting: 
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml" 
    prefix: /resetting 

fos_user_change_password: 
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml" 
    prefix: /profile 

所以......我在想什么?

+0

http://stackoverflow.com/questions/41572723/symfony-3-fosuserbundle-overriding-template – Aerendir

+0

但是,模板不工作或只有一个?我不明白 – Aerendir

+0

@Aerendir FOSUserBundle的默认模板正在工作。我的网站上的其他所有模板都在工作。唯一不能工作的是我的自定义模板不能覆盖FOS的模板,所以当我想进入我的/登录页面或/注册时,我总是会到达FOS的模板,无法让我的工作。 – Kishlin

回答

1

如果我理解正确,您需要重写FOSUserBundle的模板,例如登录名称或登录名称,等等。

为了做到这一点,您需要手动将vendor/friendsofsymfony/user_bundle/Resources/views中的所有目录/文件复制到app/Resources/FOSUserBundle/views

然后,如果你想修改登录页面的模板,那么你可以把你自己的模板放在app/Resources/FOSUserBundle/views/Security/login_content.html.twig

+0

那么,这是否意味着我们不能用继承覆盖模板了,我们必须使用app/Resources方法? – Kishlin

+0

是的,你也可以使用继承。为此,您必须使用'app/Resources/FOSUserBundle/views/layout.html.twig'。而这个'layout.html.twig'可以,例如,从'base.html.twig'继承''bootstrap'css框架。或者其他你可能想要的东西。问题是所有的模板(例如'Security/login.html.twig'或'Registration/register.html.twig')都从这个'layout.html.twig'继承。只需使用已复制的模板进行一点游戏,即可了解事情的工作原理。 –

+0

好的。我认为有可能直接从包中使用getParent()方法从FOSUserBundle继承的模板覆盖它们。然后我将使用app/Resources文件夹。谢谢。 – Kishlin