【问题标题】:Overriding "Change Password" Template from FOS User Bundle覆盖 FOS 用户包中的“更改密码”模板
【发布时间】:2014-06-24 12:25:41
【问题描述】:

我做了一些研究,遗憾的是找不到任何帮助。

所以我将 FOSUserBundle ChangePasswordAction 渲染到我的模板中,但它显示的是供应商提供的默认模板。

我在其中渲染控制器的模板:

{% block body %}
    <h2>Einstellungen</h2>
    <br/>
    <h4>Ändern Sie ihr Passwort</h4>
    {% render controller("FOSUserBundle:ChangePassword:changePassword") %}
{% endblock %}

我的 ChangePasswordAction 模板,路径是app/Resources/FOSUserBundle/views/ChangePassword/changePassword.html.twig

{% block fos_user_content %}
    {% trans_default_domain 'FOSUserBundle' %}

    <form action="{{ path('fos_user_change_password') }}" {{ form_enctype(form) }} method="POST" class="fos_user_change_password">
        {{ form_start(form) }}
            {{ form_errors(form) }}
            <p><span class="edit_left_date">{{ form_label(form.current_password, 'Jetziges Passwort') }} </span>
                <span class="edit_right">{{ form_widget(form.current_password) }}</span></p>
            <p><span class="edit_left_date">{{ form_label(form.new_password, 'Neues Passwort') }} </span>
                <span class="edit_right">{{ form_widget(form.new_password) }}</span></p>
            <p><span class="edit_left_date">{{ form_label(form.new_password_confirmation 'Bestätigen Sie ihr neues Passwort') }} </span>
                <span class="edit_right">{{ form_widget(form.new_password_confirmation) }}</span></p>
            <div>
                <input type="submit" value="{{ 'Speichern'|trans }}" />
            </div>
        {{ form_end(form) }}
    </form>
{% endblock %}

让我抓狂的是,我在我的 layout.html.twig 中以相同的方式从 FOSUserBundle 渲染登录控制器,并且它在那里完美地工作。

来自布局的代码sn-p:

{% block sidebar %}
    {% render controller("FOSUserBundle:Security:Login") %}
{% endblock %}

还有app/Resources/FOSUserBundle/views/Security/login.html.twig

{% block fos_user_content %}
    <div class="teaser-header">Login</div>
        <form role="form" action="{{ path("fos_user_security_check") }}" method="post">
            <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
            <div class="form-group">
                <label for="username">{{ 'MyLog Username'|trans }}</label>
                <input class="form-control" type="text" id="username" name="_username" placeholder="Your Username" required="required" />
            </div>
            <div class="form-group">
                <label for="password">{{ 'Password'|trans }}</label>
                <input class="form-control" type="password" id="password" name="_password" placeholder="Your Password" required="required" />
            </div>
            <input type="submit" id="_submit" name="_submit" value="{{ 'Segel setzen'|trans }}" />
            <a id="passwordForget" href={{ path('fos_user_resetting_request') }}>Password vergessen?</a>
        </form>
{% endblock %}

我是否遗漏了什么或者我做错了什么,所以我无法覆盖 changePassword 模板?

【问题讨论】:

  • 添加新模板后您是否清除了缓存?
  • 是的,从浏览器和服务器,也尝试了不同的浏览器,没有任何效果
  • 唯一会影响模板的是服务器,但正如你所做的那样,我不确定。你似乎和我有同样的设置,它确实有效。
  • 我无法结束这个问题,但我让我的电脑断电了很长一段时间,以真正清除所有缓存(我在本地虚拟服务器上工作)。似乎缓存:清除没有正确工作。既然您的评论是正确的,我会接受您的回答,如果您将其发布为一个:) 由于答案,我无法关闭此问题。

标签: php symfony fosuserbundle


【解决方案1】:

从 cmets 转向答案:

添加新模板后,您是否清除了缓存?

【讨论】:

  • 来自问题评论:我让我的电脑断电了很长一段时间,以真正清除所有缓存(我在本地虚拟服务器上工作)。似乎缓存:清除没有正确工作。
【解决方案2】:

您基本上要做的是创建自己的用户包 + 将其设置为 FOS 用户包的父级。 (你应该已经完成​​了这一步)

然后您将模板设置为: MyCompany/MyProject/UserBundle/Resources/views/Resetting/request.html.twig

由于 FOS 用户包中的文件位于同一位置,因此您的文件将覆盖该模板。

【讨论】:

  • 意味着您需要将覆盖模板放在另一个目录中。就我而言,它是 src/AppBundle/UserBundle/Resources/views/ChangePassword/changePassword.html.twig
  • 我没有将 FOSUserBundle 设置为父级,因为根据documentation,您也可以通过将它们覆盖到app/Resources/.. 文件夹来执行此操作。它适用于登录模板,那么为什么它不适用于 changePassword?
  • 如果你尝试将它设置为它的父对象呢?
【解决方案3】:

如果你认为你已经正确完成了所有操作,但仍然无法正常工作,你可以尝试在终端中使用 Symfony 命令清除缓存,或者在某些情况下手动删除缓存目录 - 'app/cache/ dev' 或 'app/cache/prod'。

【讨论】:

    猜你喜欢
    • 2014-11-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2020-11-16
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    相关资源
    最近更新 更多