2013-07-19 48 views
10

Tôi đang sử dụng FOSUserBundle trong ứng dụng Symfony thực sự tuyệt vời. Họ có đăng nhập và đăng ký biểu mẫu trong một mẫu riêng biệt. Tôi muốn cả hai trong một mẫu để hiển thị chúng bên cạnh nhau.FOSUserBundle: Cách tích hợp tốt nhất đăng nhập và đăng ký biểu mẫu trong một mẫu?

Vì vậy, tôi đã tạo app/Resources/FOSUserBundle/Security/login.html.twigapp/Resources/FOSUserBundle/Registration/register.html.twig để ghi đè cả hai mẫu. Trong login.html.twig Tôi gọi bộ điều khiển đăng ký để hiển thị mẫu của nó.

app/Resources/FOSUserBundle/Security/login.html.twig:

{% extends "FOSUserBundle::layout.html.twig" %} 

{% trans_default_domain 'FOSUserBundle' %} 

{% block fos_user_content %} 
    {% if error %} 
     <div>{{ error|trans }}</div> 
    {% endif %} 

    <form action="{{ path("fos_user_security_check") }}" method="post"> 
     <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" /> 

     <input type="text" id="username" name="_username" value="{{ last_username }}" placeholder="{{ 'security.login.username'|trans }}" required="required" /> 

     <input type="password" id="password" name="_password" placeholder="{{ 'security.login.password'|trans }}" required="required" /> 

     <input type="checkbox" id="remember_me" name="_remember_me" value="on" /> 
     <label for="remember_me">{{ 'security.login.remember_me'|trans }}</label> 

     <input type="submit" id="_submit" name="_submit" value="{{ 'security.login.submit'|trans }}" /> 
    </form> 

    {{ render(controller('FOSUserBundle:Registration:register')) }} 
{% endblock fos_user_content %} 

app/Resources/FOSUserBundle/đăng ký/register.html.twig:

{% include "FOSUserBundle:Registration:register_content.html.twig" %} 

Nhưng sau đó tôi nhận được lỗi sau:

FatalErrorException: Error: Maximum function nesting level of '100' reached, aborting! in /private/var/www/symfony/My_UserBundle/vendor/twig/twig/lib/Twig/Node/Expression/Array.php line 31 

Tôi không biết tại sao tôi nhận được thông báo lỗi này. Nếu tôi nhìn vào bộ điều khiển Security:loginRegistration:register, các mẫu được trả lại theo những cách khác nhau:

$this->renderLogin(... 

$this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.... 

Vì vậy, về cơ bản tôi có hai câu hỏi:

  • gì lỗi tin nhắn có nghĩa là gì và làm thế nào tôi có thể giải quyết nó?
  • Có lẽ cách tiếp cận này không lý tưởng, có giải pháp nào tốt hơn cho điều này không?

Trả lời

11

Bạn có thể sử dụng (như @Sidali Hallak nói)

{% render url('fos_user_registration_register') %} 
{% render url('fos_user_security_login') %} 

Nhưng sử dụng các phiên bản của riêng bạn của FOSUserBundle:Registration:register.html.twigFOSUserBundle:Security:login.html.twig mẫu mà không mở rộng FOSUserBundle::layout.html.twig

+0

âm thanh khá tốt. Nhưng vẫn còn một vấn đề chính còn lại: Bộ điều khiển đăng ký vẫn định tuyến đến các tuyến "/ đăng ký" được định cấu hình riêng của nó, đó không phải là tuyến đường tôi muốn. Làm thế nào tôi có thể ảnh hưởng đến điều này? Làm thế nào tôi có thể nói với anh ấy tôi muốn trở lại trang của tôi, nơi đăng nhập và đăng ký tồn tại bên cạnh nhau? Tôi nghĩ rằng nó không phải là giải pháp để thay đổi định tuyến của FOSUserBundle cho việc này. – tester

+1

bằng cách này: '{% render url ('fos_user_security_login')%}' không hoạt động. Bạn có thể cho tôi biết tại sao? – tester

+0

Bạn đã nhập tất cả các tuyến đường vào tệp định tuyến của riêng mình, tuyến đăng nhập phải ở trong đó làm cơ sở của thư mục đăng ký? Để tránh bị lộn xộn xung quanh với các bộ điều khiển, bạn có thể có '{% render url ('fos_user_security_login')%}' trong 'FOSUserBundle: Registration: register.html.twig' mặc dù điều này vẫn có nghĩa là biểu mẫu đăng nhập sẽ tuyến đường đến tuyến đăng nhập ban đầu khi cố gắng không thành công. Để làm điều đó đúng, tôi nghĩ bạn sẽ cần phải tùy chỉnh các bộ điều khiển đăng ký và bảo mật. – qooplmao

0

Mức tổ max đến từ Xdebug và có thể được giải quyết thiết lập ...

xdebug.max_nesting_level = 200 

... trong php.ini của bạn.

+0

Thx, tôi nghĩ đó là một vòng lặp không bao giờ kết thúc những gì tôi nhận được, bởi vì 100 mức làm tổ thực sự sâu. Điều này đã giải quyết được thông báo lỗi. Nhưng tôi đang chờ đợi nhiều đề xuất hơn về giải pháp để giải quyết vấn đề của mình theo cách tốt hơn nếu có. – tester

+0

Dường như thành phần Form của Symfony2 sử dụng rất nhiều đệ quy, vui lòng xem các tài liệu chính thức: http://symfony.com/doc/current/cookbook/form/form_collections.html (phần liên quan là khoảng 1/3 xuống trang) – frak

3

sử dụng:

{% render url('fos_user_security_login') %} 
{% render url('fos_user_Registration_register') %} 
+0

Tôi thêm '' '{% render url ('fos_user_security_login')%}' '', nhưng chỉ cho tôi biểu mẫu đăng nhập và đăng ký, Tại sao? Như tôi có thể làm để chỉ hiển thị thông tin đăng nhập. Tôi nghĩ rằng lỗi nằm sonataadmin – jcarlosweb

5

Để tuân thủ các phiên bản Symfony mới hơn, bạn nên tránh sử dụng thẻ {% render %} và sử dụng {{ render(controller('MyBundle:ControllerClass:action')) }} thay thế:

{{ render(controller('FOSUserBundle:Security:login')) }} 
    {{ render(controller('FOSUserBundle:Registration:register')) }} 
Các vấn đề liên quan