Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2][SF2]Includowanie formularza logowania w FOSUserBundle
Forum PHP.pl > Forum > PHP > Frameworki
amii
Chciałbym po prostu formularz logowania wyświetlać na głównej stronie, aktualnie jest on dostępny pod standardowym adresem dla FOSUserBundle: localhost/login
Po wejściu na stronę główną mam:
Variable "error" does not exist in PortalSlubnyMainBundle:Default:Partials/login.html.twig at line 1
Być może da się to zrobić prościej jeśli tak to proszę o wskazówki bo być może zamotałem a z Symfony2 dopiero zaczynam zabawę

To mój index.html.twig:
  1. {% extends 'PortalSlubnyMainBundle::layout.html.twig' %}
  2.  
  3. {% block body %}
  4. {% include 'PortalSlubnyMainBundle:Default:Partials/login.html.twig' %}
  5. To jest portal ślubny 2013
  6. {% endblock %}


layuot.html.twig
  1. {% extends '::base.html.twig' %}
  2.  
  3. {% block body %}
  4. {{ block('fos_user_content') }}
  5. {% endblock %}


Szablon logowania umieściłem w: slub/src/PortalSlubny/MainBundle/Resources/views/Default/Partials/login.html.twig
dodam, że szablon ten został przekopiowany (z kosmetycznymi zmianami html i styli) ze standardowego szablonu logowania FOS, który jest u mnie w:
slub/app/Resources/FOSUserBundle/views/Security/login.html.twig i ten szablon pod adresem localhost/login wyświetla się ok

  1. {% extends "FOSUserBundle::layout.html.twig" %}
  2.  
  3. {% trans_default_domain 'FOSUserBundle' %}
  4.  
  5. {% block fos_user_content %}
  6. {% if error %}
  7. <div>{{ error|trans }}</div>
  8. {% endif %}
  9.  
  10. <form action="{{ path("fos_user_security_check") }}" method="post">
  11. <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
  12.  
  13. <div class="row">
  14. <div class="large-6 columns">
  15. <label for="username">{{ 'security.login.username'|trans }}</label>
  16. <input type="text" id="username" name="_username" value="{{ last_username }}" placeholder="login..." required="required" />
  17. </div>
  18.  
  19. <div class="large-6 columns">
  20. <label for="password">{{ 'security.login.password'|trans }}</label>
  21. <input type="password" id="password" name="_password" placeholder="hasło..." required="required" />
  22. </div>
  23. </div>
  24.  
  25. <div class="row">
  26. <label for="remember_me"><input type="checkbox" id="remember_me" name="_remember_me" value="on" /><span class="custom checkbox"></span>{{ 'security.login.remember_me'|trans }}</label>
  27.  
  28. <div class="small-4 columns">
  29. <input type="submit" id="_submit" class="button postfix" name="_submit" value="{{ 'security.login.submit'|trans }}" />
  30. </div>
  31. </div>
  32.  
  33. </form>
  34. {{ form_rest(form) }}
  35. {% endblock fos_user_content %}
gaua69
Chyba nie do konca rozumiesz idee autoryzacji w Symfony. Jezeli chcesz zeby wejscie na stone glowna wymagalo logowania, umiesc odpowiednia regule w pliku security.yml.
amii
Nie chcę aby wejście na stronę główną wymagało logowania po prostu chce umieścić formularz do logowania, tak jak jest to np. na forum.php.pl w lewym górnym rogu.
Crozin
Jak rozumiem chcesz by na każdej stronie był formularz logowania, który w przypadku poprawnych danych działa dokładnie tak samo jak ten z dedykowanej strony, a w przypadku błędu przenosi właśnie na ową dedykowaną stronę logowania, gdzie wyświetla się błąd oraz formularz, tak?

1. Zgodnie z dokumentacją tworzysz sobie dedykowaną stronę logowania.
2. W szablonie, który jest wyświetlany wszędzie (prawdopodobnie layout.html.twig) tworzysz sobie zwykły formularz w HTML, który podobnie jak formularz ze strony logowania prowadzi do fos_user_security_check oraz zawiera pola _username, _password, _remember_me oraz _csrf_token.
3. O ile pierwsze trzy pola to najzwyklejszy HTML o tyle ostatnie z nich musi zawierać token CSRF (w przypadku, gdy jego obsługa jest włączona). Jednak Twig posiada wbudowaną* funkcję csrf_token(), która taki token generuje.
4. Formularz to zwykłe:
  1. <form action="{{ path("fos_user_security_check") }}" method="post">
  2. <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" />
  3. ...
  4. </form>


* właściwie to jest ona zdefiniowana przez TwigBundle'a.
amii
Dzięki Crozin, dokładnie to chodziło mi o to: csrf_token('authenticate bo wcześniej wyrzucał komunikat Invalid CSRF token a teraz śmiga smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.