Wpis z mikrobloga

Witam mirków.
Znam trochę #php ale teraz muszę się podszkolić z #sf2. Chcę zrobić logowanie się na stronę. Korzystając z cookbook zrobiłem rejestrację użytkownika, teraz chcę zrobić logowanie. Korzystam z tego:http://symfony.com/doc/current/cookbook/security/form_login_setup.html
Ale po wprowadzeniu danych logowania się i wysłaniu ich otrzymuję błąd:

The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?

Nie rozumiem ocb, bo w coockbook napisane, że metoda loginCheckAction nie jest wywołana tylko dzieje się wszystko automatycznie, a tutaj mam błąd, bo metoda nic nie zwraca. Co robię nie tak?
#webdev
  • 19
  • Odpowiedz
@Belic: Dałem return i nic się nie zmieniło.
W linku który podałem napisane jest, że wszystko ma działać automatycznie, więc raczej podejrzewam, że trzeba skonfigurować /app/config/security.yml i ustawić providers aby korzystało z Entity User i sprawdziło dane w bazie danych. Niestety, ale SF to dla mnie ciemny las i nie wiem jak to ma działać.
W pracy mam Yii i tam wszystko jest prostsze, ale jeśli chcę się rozwijać i zmienić
  • Odpowiedz
@mariecziek: co do twojego błędu, każda akcja w kontrolerze MUSI zwrócić instancje Response (jaką konkretnie to już zależy od potrzeb).
Po drugie użyj dokumentacji instalacji FOSUserBundle a nie tej symfonowej, bo połowy rzeczy które są tam opisane są zbędne i da sie to zrobić prościej
  • Odpowiedz
@mariecziek:

return $this->render('AppBundle:templatka.html.twig');

albo ustawić @Template('...') w adnotacji, i

return [];

(w tablicy zwracasz tablicę zmiennych do szablonu, funkcja render() przyjmuje ją jako drugi argument)
  • Odpowiedz
@mariecziek:

1. W loginCheckAction() rzucaj sobie w środku wyjątkiem, np throw new \ RuntimeException('Błąd konfiguracji Security, ta akcja nie powinna się odpalić'); – w ten sposób w przyszłości łatwiej wykryjesz problem, jak coś się zwali (podpatrzone w FOSUserBundle).

2. W dokumentacji masz:

firewalls:
default:
anonymous: ~
http_basic: ~
form_login:
login_path: /login
check_path: /login_check

I dodatkowo:

The login_path and check_path can also be route names (but cannot have mandatory
  • Odpowiedz
@mariecziek: BTW, to jest dokładnie ten problem, o którym piszą w dokumentacji:

First, be sure that you've defined the /login and /login_check routes correctly and that they correspond to the login_path and check_path config values. A misconfiguration here can mean that you're redirected to a 404 page instead of the login page, or that submitting the login form does nothing (you just see the login form over and over again).
  • Odpowiedz
@MacDada: Kolega mi pomógł. Coś pozmieniał w kontrolerze i route i zadziałało, ale szczerze mówiąc nie do końca wiem co…
No nic, zadanko wykonałem i może wezmą mnie do nowej pracy :/
  • Odpowiedz
@mariecziek: Używasz GITa? Jak nie to koniecznie zacznij, bo niezbędne narzędzie w pracy (i koniec będzie, że „coś się zmieniło, a nie wiem co” – wszystko będzie widać jak na tacy).
  • Odpowiedz
@MacDada: Mam w domu własny serwer na CenOS 7 z GIT, serwerem apache i PostgreSQL, ale po prostu do tak małego zadania nie tworzyłem od razu nowego repozytorium. Zresztą NetBeans zapamiętuje jakie zmiany były wprowadzane lokalnie na komputerze :)
  • Odpowiedz