SonataAdminBundle + SonataUserBundle + FOSUserBundle + Symfony 3.2.7

Po długim i dogłębnym ten tegowaniu w głowie – DZIAŁA ! Na prawdę działa! Radość ma nie zna granic 🙂

Nic tak nie cieszy jak możliwość zalogowania się do panelu administracyjnego.

Zmian nie jest dużo aczkolwiek dojście do tego co i gdzie powinno się znajdować zajęło mi sporo czasu. Stawianie pierwszych kroków w Symfony nie zawsze jest proste ale jak już wiesz jak to powinno działać, oczom nie wierzysz, że może to być tak proste. Bardzo zdziwiło mnie, że po skonfigurowaniu wszystkiego co miało być skonfigurowane,  pojawiły mi się w panelu:

  • listy użytkowników,
  • grupy,
  • edycja użytkowników,
  • profil administratora
  • nadawanie uprawnień dla użytkowników

Tak po prostu. Zalogowałam się i to już było. Pierwsze co przyszło mi do głowy „Matko ile to zaoszczędza pracy!”. I choć np. „przypomnij hasło” jeszcze nie działa to na prawdę uważam to za mega progress w projekcie.

Aby to ruszyło przede wszystkim trzeba było usunąć wszelkie stare rozwiązania dot. rejestracji i logowania. Następnie poprawnie skonfigurować pliki config.yml, security.yml i routing.yml oraz wykonać kilka poleceń w konsoli 🙂

php app/console doctrine:schema:update --force
php app/console assets:install web
php app/console cache:clear

Dodanie nowego administratora do bazy było bajecznie proste.

php app/console fos:user:create admin admin@example.com password --super-admin

Zaraz po uruchomieniu rejestracji pojawił mi się błąd:

Unknown "form_enctype" function.

Wujek google, mimo poświęcenia mu sporej ilości czasu, nie podał rozwiązania tego problemu w sposób, który u mnie by zadziałał.

Analiza błędu i informacji wniosła tylko tyle, że bundle po prostu są nie do końca kompatybilne. Natomiast bliższe przyjrzenie się samym templatkom doprowadziło do workaround’a w postaci nadpisania następujących templatów:

// ścieżka oryginalna
vendor/sonata-project/user-bundle/Resources/views/Registration/register_content.html.twig

// ścieżka nadpisania
src/Application/Sonata/UserBundle/Resources/views/Registration/register_content.html.twig

// ścieżka zawartości
vendor/friendsofsymfony/user-bundle/Resources/views/Registration/register_content.html.twig

Na pomysł ten wpadłam po tym jak zauważyłam, że w templatce ścieżki oryginalnej znajdują się bezpośrednie odwołania do FOSUserBundle. Na ten moment niestety nie wiem czy będzie to implikowało jakieś dodatkowe problemy ale sama ta poprawka spowodowała, że wejście w rejestracje przestało rzucać błędem.

Kolejnym problemem zaraz po wysłaniu formularza rejestracji było wyrzucenie błędu o braku tabeli base_user. Nie konfigurowałam nigdzie tej tabeli i bardzo zdziwiło mnie, że proces rejestracji próbuje z niej korzystać.  Rozwiązanie okazało się bardzo proste otóż:

src/EcoDevBundle/Entity/User.php

// powinno dziedziczyć po:
\Sonata\UserBundle\Entity\BaseUser

// zamiast po
FOS\UserBundle\Model\User

Aby prześledzić wszystkie zmiany w projekcie dot. tej modyfikacji, najlepiej zajrzeć do commita znajdującego się na github.com.