2014-11-16 2 views
4

구매 한 템플릿을 대시 보드에 적용해야합니다. 이 템플릿에서 로그인, 레지스터비밀번호 분실 양식은 모두 동일한보기 아래에 있으며 단순한 JQuery를 사용하여 전환됩니다.symfony2 fos login, 등록 및 하나의보기에서 비밀번호 분실

나는 세 가지 형식을 하나로 결합하는 멋지고 화려하지 않은 방법을 찾고 있었지만 비어있었습니다.

내 서 옵션

(나는 그들을 볼로), 그리고 왜 내가 그들 중 좋아하지 않는다 :

  1. 는 FOS 번들로부터 의견을 받아를 /app/Resources/FOSUserBundle/views/로 복사 {% extend %} 부분 {% include %}을 제거 내 자신의 로그인보기에서. 싫어하는 이유 : 나에게 이것은 빠른 앤드 더티 픽스처럼 보입니다. "그 부분은 작동하지 않습니까? :)
  2. fos 번들을 확장하고 LoginActionRegisterAction에 추가 매개 변수를 허용하려면 {% render %}을 내 로그인보기의 매개 변수와 함께 사용하십시오. 싫어하는 이유 : 전체 번들을 확장하고 렌더링하는 방식을 변경하기 위해 두 개의 다른 컨트롤러를 수정하는 것은 나쁜 MVC와 같은 느낌을줍니다.
  3. XHR 모두로드합니다. 싫어하는 이유 :이 방법은 내부 페이지를 사용할 때 의미가 있지만 어쨌든 다시로드하는 페이지에는 의미가 없습니다.

TL; DR 버전 : 내가 등록, 로그인 등의 비 해킹 방법을 찾고 하나의 페이지에서 비밀번호 양식을 잊고 있어요.

도움이 될 것입니다.

+3

나는 솔루션 # 1을, 나는 기분이 나쁜되지 않습니다. 템플릿을 재정의 아마 이것은 내가 구현 무슨 생각도했다 – oligan

+0

IMO이 작업을 수행하는 가장 깨끗한 방법입니다,하지만 난 같은 양식을 잡고 두 개의보기를 할 필요가 있음을 깨달았다 - 다시 다음 번/로그인과/등록 (어쩌면 세 번째로/요청!), 또는 악화 - 다른 쪽으로 리디렉션됩니다. 이것은 나에게 이해가되지 않습니다. 나는 실종 된 더 나은 해결책이 있다는 것을 거의 확신하고있다 .... – Noy

+1

Solution No 2는 작동하기 때문에 더 나은 접근법이다. 나는 아니오에 대해 의심한다. 1 접근 방식은로드/로그인 후 템플릿 양식 요소를 사용할 수 없을 때 사용할 수 있고 로그인 템플릿을 등록 할 때 양식 요소가 작동하지 않기 때문에 작동합니다. 그래서 제 의견으로는 솔루션 No 2가 이러한 작업을 수행하기위한 최선의 방법입니다. –

답변

3

현재 프로젝트에 대해 만족할만한 해결책을 발견했습니다. 제안 된 솔루션 선행의 장점과 단점 :

장점 :

:

  • 몇 LOC는
  • FOSUserBundle 업데이트를 증거

단점 (뷰 스크립트 *을 무시하지 않습니다) 구현

  • 하위 요청으로 인한 성능 오버 헤드
  • 유일한 형태는, 표시 할 수있는 형태로 제출 (그리고 이후 제출시 오류 처리) 항상 여전히 빠른 앤 더러운 수정 같은 느낌
  • FOSUserBundle
  • 에서 제공하는 페이지로 이동하지만, 다른 옵션
보다 더 나은 것

*는 layout.html을 덮어 쓰기 만하면됩니다.

:

  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 레이아웃
    내가 번들로 제공되는 경로를 사용할 때
    , 나는 내 응용 프로그램의 표준 레이아웃을 확장 할 override the FOSUserBundle layout template file로했다. 재정의 된 FOSUserBundle 레이아웃 파일이 주 응용 프로그램 레이아웃 파일을 확장하므로 레이아웃은 각 호출 {{ render ... }}에 대해 반복됩니다. 이를 방지하려면 확장 레이아웃 파일을 동적으로 해제해야합니다. 이 레이아웃 만 FOSUserBundle보기 스크립트의 content 블록을 렌더링해야

    {# 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 file
    을 작성하고 같은 짧고 간단하다 : 여기에 오버라이드 (override) 레이아웃 파일의 모습입니다

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

지금 형태의 모든 종속성 (등 CSRF와)과 잘 렌더링됩니다. 양식을 제출하면 FOSUserBundle 작업으로 이동합니다.


대체 솔루션 :

  • This answer

    수동 형태를 구현하고 FOSUserBundle 컨트롤러에 연결하는 방법에 대해 설명합니다.
+0

등록 양식에 오류가 있으면 어떻게됩니까? – IROEGBU

+0

사용자가 제출 한 형태 (예를 들어, 등록)에 대한 기본 FOSUserBundle 조치로 리디렉션되고 검증 오류가 표시됩니다 제출하지만 유효하지 않은 형식의 경우. 따라서 사용자는 통합 페이지를 남겨 둡니다 (단점 일 수도 있고 아닐 수도 있습니다). –

+0

이 문제의 또 다른 해결책은 로그인 레이아웃을 등록 레이아웃에 추가하는 것입니다. [here]와 같이 (fos routes를 포함시킨 후) 등록 컨트롤러에 대한 로그인 경로를 다시 매핑합니다 (http : // stackoverflow.com/questions/19608458/how-to-customize-fos-userbundle-urls). 그래도 로그인 오류가 발생하지는 않지만 더 빠른 방법이라고 생각합니다. – IROEGBU

관련 문제