Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symofny2] Jak wstrzyknąć serwis
Forum PHP.pl > Forum > PHP
amii
Potrzebuję: udostępniać opcję nadawania ról w formularzu rejestracji w zależności od roli dla admina i wyżej, czyli tak naprawdę potrzebuję jedynie ukryć select w formularzu, niby łatwe... a nie do końca bo gimnastykuję się z tym już klika godz.

Mój pomysł: Korzystam z Sonata i FOSUserBundle, mam zdefiniowany AppBundle\Form\Type\RegistrationFormType prosta klasa tworząca formularz dziedzicząca z FOSUserBundle i tu bym chciał mieć obiekt security.context bo po nim bym już sobie spr. rolę

Problem: Żeby wstrzykąć ten security.context przesłoniłem sobie kontroler z FOSUserBundle, ale mam problem z wstrzyknięciem security.context do RegistrationFormType dlatego, że FOS używa jakiegoś serwisu do produkowania form
  1. $formFactory = $this->get('fos_user.registration.form.factory');
i gdzie tu przekazać dodatkową zależnomość ?

No to chciałem napisać serwis, który by robił dokładnie to co tamten ale to też nie działa:
Definiując sobie to w ten sposób, krzyczy, że mam nie zdefiniowane zależności. To znaczy, że Symofny ładuję jakoś później te serwisy z dodatkowych bundle ? Czy coś trzeba ustawić, żeby je załadował ? Może w ogóle nie potrzebie kombinuję, bo serio to w sumie prosta rzecz a tu mnożą jakieś problemy :/
  1. form.type.user:
  2. class: AppBundle\Form\Factory\FormFactory
  3. arguments: ["@form.factory, %fos_user.registration.form.name%, %fos_user.registration.form.type%, %fos_user.registration.form.validation_groups%, @security.context"]
  4. tags:
  5. - { name: form.type, alias: custom_user_registration }
Damonsson
Chcesz przy rejestracji sprawdzać rolę usera, który dopiero ma się zarejestrować? Nic z tego nie rozumiem, ale to akurat nie jest istotne biggrin.gif

Najważniejsze, że chcesz mieć podgląd roli usera w FormType, a więc:

Po pierwsze, nie żadne security.context (bo jest deprecated), tylko security.token_storage

A następnie najzwyczajniej w świecie w klasie FormType przez DI w konstruktorze umieszczasz TokenStorage i masz go pięknie dostępny, nic nie trzeba kombinować.
  1. public function __construct(TokenStorageInterface $tokenStorage)
  2. {
  3. $this->tokenStorage = $tokenStorage;
  4. }

i wywołanie:
  1. $formFactory = $this->get('fos_user.registration.form.factory');
  2. $tokenStorage = $this->get('security.token_storage');
  3. $form = $formFactory->createForm(
  4. new RegistrationFormType($tokenStorage)
  5. );
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.