编程语言
首页 > 编程语言> > php – 从继承覆盖FOSUserBundle的模板

php – 从继承覆盖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 cache:clear,或者“手动”删除项目根目录中的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

那么……我错过了什么?

解决方法:

如果我理解正确,您需要覆盖FOSUserBundle的模板,例如用于登录的模板或用于注册的模板,依此类推.

为此,您需要手动将所有目录/文件从vendor / friendsofsymfony / user_bundle / Resources / views复制到app / Resources / FOSUserBundle / views.

然后,如果要修改登录页面的模板,则可以将自己的模板放在app / Resources / FOSUserBundle / views / Security / login_content.html.twig中.

标签:php,symfony,inheritance,fosuserbundle,overriding
来源: https://codeday.me/bug/20191007/1864368.html