2017-01-10 122 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