草庐IT

php - Symfony2 fos 在一个 View 中登录、注册和忘记密码

coder 2024-04-17 原文

我需要将购买的模板应用到我们的仪表板。在这个模板中,loginregisterforgot password 表单都在同一个 View 下,并使用简单的 JQuery 在它们之间切换。

我一直在寻找一种将所有三种形式组合成一个的不错的、不太花哨的方法,但我一无所获。

我的常设选项(如我所见),以及我不喜欢其中任何一个的原因:

  1. 从 fos 包中取出 View ,将它们复制到 /app/Resources/FOSUserBundle/views/,删除 {% extend %} 部分和 {% include %} 它们在我自己的登录 View 中。 不喜欢的原因:对我来说,这看起来有点像快速修复 - “那个部分不起作用?让我们把它拆掉!” :)
  2. 扩展 fos 包,在 LoginActionRegisterAction 中接受一个额外的参数,在我自己的参数中使用 {% render %}登录 View 。 不喜欢的原因:扩展整个包并修改两个不同的 Controller 只是为了改变它呈现的方式,感觉就像糟糕的 MVC。
  3. XHR 加载一切。 不喜欢的原因:这种方法在使用内页时很有意义,但对于无论如何都要重新加载的页面来说就没有意义了。

TL;DR version:我正在寻找一种非黑客方式,将登录、注册和忘记密码表单包含在一个页面中。

如有任何帮助,我们将不胜感激!

最佳答案

我找到了适合我当前项目的解决方案。预先提出的解决方案的优缺点:

优点:

  • 需要实现的 LOC 很少
  • FOSUserBundle 更新证明(不覆盖 View 脚本*)

缺点:

  • 由于子请求导致的性能开销
  • 只能显示表单,表单提交(以及随后的提交错误处理)将始终转到 FOSUserBundle 提供的页面
  • 仍然感觉像是一种快速修复,但比其他选择更好

* 只需要覆盖layout.html.twig文件


话虽如此,这是我所做的:

  1. 在您的模板中呈现表单
    使用 embedded controllers呈现您需要的表单:

    <div>
        <h2>Login</h2>
        {{ render(controller('FOSUserBundle:Security:login', { embeddedForm: true})) }}
    </div>
    <div>
        <h2>Reset</h2>
        {{ render(controller('FOSUserBundle:Resetting:request', { embeddedForm: true})) }}
    </div>
    
  2. 覆盖 FOSUserBundle 布局
    当我使用 bundle 提供的路线时,我不得不 override the FOSUserBundle layout template file扩展我的应用程序的标准布局。由于覆盖的 FOSUserBundle 布局文件扩展了主应用程序布局文件,因此每次调用 {{ render ... }} 时都会重复布局。为了防止这种情况,我们需要动态解除扩展布局文件。这是覆盖布局文件的样子:

    {# app/Resources/FOSUserBundle/views/layout.html.twig #}
    {% if app.request.get('embeddedForm') %}
        {% set layout = 'AcmeBundle::layout-content.html.twig' %}
    {% else %}
        {% set layout = 'AcmeBundle::layout.html.twig' %}
    {%  endif %}
    {% extends layout %}
    
    {% block content %}
        {% block fos_user_content %}{% endblock %}
    {% endblock %}
    
  3. 创建 AcmeBundle::layout-content.html.twig 文件
    此布局应仅呈现 FOSUserBundle View 脚本的 content block ,并且非常简短:

    {# src/Acme/DemoBundle/Resources/views/layout-content.html.twig #}
    {% block content %}{% endblock %}
    

现在表单将很好地呈现所有依赖项(CSRF 等)。但是,提交表单会将您带到 FOSUserBundle 操作。


替代方案:

  • This answer描述了如何手动实现表单并将它们链接到 FOSUserBundle Controller 。

关于php - Symfony2 fos 在一个 View 中登录、注册和忘记密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26959973/

有关php - Symfony2 fos 在一个 View 中登录、注册和忘记密码的更多相关文章

  1. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  2. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  3. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  4. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  5. ruby-on-rails - 复数 for fields_for has_many 关联未显示在 View 中 - 2

    目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi

  6. ruby-on-rails - 在 haml View 中重构条件 - 2

    除了可访问性标准不鼓励使用这一事实指向当前页面的链接,我应该怎么做重构以下View代码?#navigation%ul.tabbed-ifcurrent_page?(new_profile_path)%li{:class=>"current_page_item"}=link_tot("new_profile"),new_profile_path-else%li=link_tot("new_profile"),new_profile_path-ifcurrent_page?(profiles_path)%li{:class=>"current_page_item"}=link_tot("p

  7. ruby - Sinatra 找不到 View 目录 - 2

    我正在尝试以一种更类似于普通RubyGem结构的方式构建我的Sinatra应用程序。我有以下文件树:.├──app.rb├──config.ru├──Gemfile├──Gemfile.lock├──helpers│  ├──dbconfig.rb│  ├──functions.rb│  └──init.rb├──hidden│  └──Rakefile├──lib│  ├──admin.rb│  ├──api.rb│  ├──indexer.rb│  ├──init.rb│  └──magnet.rb├──models│  ├──init.rb│  ├──invite.rb│  ├─

  8. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  9. ruby-on-rails - Rails 3 在一个查询中包含多个表 - 2

    我正在为锦标赛开发一个Rails应用程序。我在这个查询中使用了三个模型:classPlayertruehas_and_belongs_to_many:tournamentsclassTournament:destroyclassPlayerMatch"Player",:foreign_key=>"player_one"belongs_to:player_two,:class_name=>"Player",:foreign_key=>"player_two"在tournaments_controller的显示操作中,我调用以下查询:Tournament.where(:id=>params

  10. ruby-on-rails - 如何从按钮或链接单击的 View 调用 Rails 方法 - 2

    基本上,我试图在用户单击链接(或按钮或某种类型的交互元素)时执行Rails方法。我试着把它放在View中:但这似乎没有用。它最终只是在用户甚至没有点击“添加”链接的情况下调用该函数。我也用link_to试过了,但也没用。我开始认为没有一种干净的方法可以做到这一点。无论如何,感谢您的帮助。附言。我在ApplicationController中定义了该方法,它是一个辅助方法。 最佳答案 View和Controller是相互独立的。为了使链接在Controller内执行函数调用,您需要对应用程序中的端点执行ajax调用。该路由应调用rub

随机推荐