首页 文章

如何覆盖HWIOAuthBundle twig文件

提问于
浏览
3

我是HWIOAuthBundle的新手,使用Symfony2.3 FosUserBundle . 我在我的项目中使用此捆绑包进行facebook,twitter,googleplus登录 .

我已经成功安装了这个并且工作正常 . 但我想覆盖login.html.twig,因为我想将facebook,twitter,google plus Images显示给我们的twig文件,但我不知道如何在HWIOAuthBundle中执行此操作 .

我的login.html.twig

{% block content %}
  {# Bonus: Show all available login link in HWIOAuthBundle #}
  {% render(controller('HWIOAuthBundle:Connect:connect')) %}
{% endblock %}

基本HWIOAuthBundle login.html.twig

{% extends 'HWIOAuthBundle::layout.html.twig' %}

{% block hwi_oauth_content %}
{% if error %}
    <span>{{ error }}</span>
{% endif %}
{% for owner in hwi_oauth_resource_owners() %}
<a href="{{ hwi_oauth_login_url(owner) }}">{{ owner | trans({}, 'HWIOAuthBundle') }}</a>     
{% endfor %} {% endblock hwi_oauth_content %}

哪个在Html页面中显示此类型:

Facebook
Google Plus
Twitter

默认情况下,当点击任何一个然后重定向到他的页面(Facebook,Twitter,Google Plus)时显示 .

但我希望显示这种类型的HTML:

<!-- socials -->
       <ul class="top-socials">
           <li><a class="facebook" href="#">Facebook</a></li>
           <li><a class="twitter" href="#">Twitter</a></li>
           <li><a class="google-plus" href="#">Google+</a></li>
       </ul>

我怎样才能做到这一点 ?

2 回答

  • 3

    要更具体地说明您的情况,您应该创建2个新视图:

    应用程序/资源/ HWIOAuthBundle /视图/ layout.html.twig:

    {# extends your own base template #}
    {% extends 'MyBundle::layout.html.twig' %}
    
    {% block title %}{{ 'Login' | trans }}{% endblock %}
    
    {% block body %}
        {% block hwi_oauth_content %}
        {% endblock hwi_oauth_content %}
    {% endblock %}
    

    应用程序/资源/ HWIOAuthBundle /视图/连接/ login.html.twig:

    {% extends 'HWIOAuthBundle::layout.html.twig' %}
    
    {% block hwi_oauth_content %}
    
        {# Display oauth errors (here using Bootstrap) #}
        {% if error is defined and error %}
            <div class="row">
                <div class="col-md-12 alert alert-danger text-center">
                    <span class="error">{{ error }}</span>
                </div>
            </div>
        {% endif %}
    
        {# HWIOAuthBundle integration #}
    
        <ul class="top-social">
           <li><a class="#" href="{{ hwi_oauth_login_url('facebook') }}">Facebook</a></li>
           <li><a class="#" href="{{ hwi_oauth_login_url('twitter') }}">Twitter</a></li>
           <li><a class="#" href="{{ hwi_oauth_login_url('google') }}">Google+</a></li>
        </ul>
    
    {% endblock hwi_oauth_content %}
    

    不要试图将此登录页面放在第一个文件中,因为OAUthBundle使用其他几个视图(以确认配置文件等) .

    此示例取自symfony-quickstart项目 .

  • 4

    你有两个解决方案:

    • 使用包继承并使用父路径优化模板

    • 在app app / Ressources /中声明一个模板:app / Ressources / AcmeBundle / Directory / template.html.twig(其中 /AcmeBundle/Directory/template.html.twig 与供应商中模板的路径完全相同)

    Doc:

相关问题