Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symofny2] Jak wstrzyknąć serwis
amii
post 24.09.2015, 16:56:52
Post #1





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


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 }


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
Damonsson
post 25.09.2015, 00:29:27
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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. );


Ten post edytował Damonsson 25.09.2015, 00:49:13
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:55