php – FOSUserBundle压倒不连贯
|
我遇到了关于FOSUserBundle最重要的可能性的无数问题,并且在使用Twig的继承机制时发现了一些“设计不连贯”,我想澄清一下,因为它在某些项目中真的令人不安…… 覆盖FOSUserBundle中的模板 从我读过的内容来看,我们应该如何覆盖模板.比方说,登录模板(Security / login.html.twig).首先,我需要覆盖全局FOSUser布局(layout.html.twig’). 全球FOSUser布局 {% extends "::layout.html.twig" %}
{% block title %}Page title{% endblock title %}
{% block body %}
<div id="container">
{% block fos_user_content %}{% endblock %}
</div>
{% endblock body %}
标题和正文块是对HTML< title>的引用.和< body>标签(全局).现在,谈到登录本身,这就是我写的内容. 登录表格 {% extends "MyUserBundle::layout.html.twig" %}
{% block fos_user_content %}
{% if error %}
<div class="error">{{ error|trans({},'FOSUserBundle') }}</div>
{% endif %}
<form action="{{ path("fos_user_security_check") }}" method="post">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
<label for="username">{{ 'security.login.username'|trans({},'FOSUserBundle') }}</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" required="required" /><br />
<label for="password">{{ 'security.login.password'|trans({},'FOSUserBundle') }}</label>
<input type="password" id="password" name="_password" required="required" /><br />
<input type="checkbox" class="checkbox" id="remember_me" name="_remember_me" value="on" />
<label for="remember_me">{{ 'security.login.remember_me'|trans({},'FOSUserBundle') }}</label><br />
<label for="_submit"></label>
<input type="submit" class="submit" id="_submit" name="_submit" value="{{ 'security.login.submit'|trans({},'FOSUserBundle') }}" />
</form>
{% endblock fos_user_content %}
现在,这就是我自动理解的内容:布局创建了一个环境,其他模板被“包含”到fos_user_content块中.登录页面的结果遵循此方案. 另一个尝试?注册. 现在,按照这种模式,我试图扩展注册表格,思考:“我应该像以前一样扩展fos_user_content的内容!猜猜是什么?不是它!这是我的Registration / register_content.html.twig文件. 注册表单内容 {% extends "MyUserBundle::layout.html.twig" %}
{% block fos_user_content %}
<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register">
{{ form_widget(form) }}
<div>
<input type="submit" value="{{ 'registration.submit'|trans({},'FOSUserBundle') }}" />
</div>
</form>
{% endblock %}
问题 以前的模式似乎不适用于注册部分:当我遵循相同的方案时,我的注册页面以图形方式加倍.表格打印两次,标题也是如此……就像我在某处做了不必要的包含/继承…… 有没有人知道FOSUserBundle是不是设计了覆盖模板的通用模式?为什么我需要重建完整的继承树才能在登录和注册表单上显示类似的内容? 解决方案(?) Cerad的回答为注册案例提供了不同的方案. Twig继承树不包括register_content.html.twig,并使用register.html.twig.当你看一下这个文件时,你可以看到它…包括register_content.html.twig.这是我所说的不连贯.为什么是这样 ?为什么不直接使用包含内容的单个文件?为什么FOS决定添加这个无用的(?)包含步骤? 我不完全确定我理解你的问题. register_content.html.twig旨在包含在register.html.twig中,因此其中没有extends语句. register.html.twig包含extends语句.不确定这是否有助于解决您的问题.更新:那他们为什么这样做呢? 当然,你会要求作者真正了解.我只能推测. 可以设置模板继承,以便可以使用您自己的布局文件覆盖FOSUserBundle :: layout.html.twig,而无需编辑更改或复制FOSUserBundle模板.我不会试着详细说明如何做到这一点.我怀疑你已经尝试过了. 使用相同的技术,您可以用自己的模板替换FOSUserBundle register_contents模板.这使您可以自定义注册页面的内容,而无需真正担心它是如何被包含的. 就个人而言,我发现整个捆绑都很乱.我将一些用户实体和经理的东西复制到我自己的用户包中.我忽略了他们的模板和控制器.如果发布的目标是S2.1或更高版本的稳定版本,那么我可能会重新访问该捆绑包.但是自从S2.1发布以来已经有好几年了,但仍然没有可用的稳定版本. 我的建议:如果模板是你的错误,那么就不要使用它们. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
