![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 22.03.2015 Ostrzeżenie: (0%)
|
Witam,
mam pytanie. Posiadam kilka kontrolerów, są to czyste CRUD'y i stworzyłem dodatkowy kontroler który będzie nimi wszystkimi zarządzał. Próbuje wrzucić w konstruktorze np.
Niestety wyświetla mi cały czas, że $news powinna być instancją klasy NewsController( wiem że tak powinno być ) ale dlaczego automatycznie nie jest to ładowane? Czy jakiś serwis muszę do tego napisać? Jak wygląda przykładowa implementacja takiego rozwiązania ? |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Bo musisz zdefiniować DI poprzez konfigurację bundle'a.
Ten post edytował kpt_lucek 11.04.2015, 12:50:28 |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 22.03.2015 Ostrzeżenie: (0%)
|
Czyli rozumiem, że jest to np. tak:
gdzie potem odwołuje się do tego tak :
Ten post edytował Matrix12 11.04.2015, 12:55:28 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Zacznijmy może od tego co chcesz zrobić, bo w praktyce nie wiem jak Ci pomóc/wytłumaczyć/naprowadzić na to co mógłbyś zrobić.
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 22.03.2015 Ostrzeżenie: (0%)
|
Mam kilka crudów którymi chciałbym zarządzać z AdminController... dlatego chce nauczyć wstrzykiwać zależności bo wtedy będę mógł się odwołać do każdego z tych crudów.
|
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Zacznijmy od tego że Twój controller rozszerza BaseController.
Miej na uwadze iż BaseController zawiera swój constructor, a w nim są wstrzykiwane zależności chociażby do container'a. Jeżeli chcesz, aby Twój AdminController zbierał wszystkie pozostałe, możesz do tego użyć serwisów tagowanych + compiler pass, dzięki temu nie musisz wstrzykiwać każdego z osobna (IMG:style_emoticons/default/smile.gif) Zainteresuj się Tym, tym i tym. |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 22.03.2015 Ostrzeżenie: (0%)
|
Próbowałem zdefiniować kontroler jako serwis ale to nie działa;/
|
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Stwierdzenie "nie działa" mówi tyle co nic. Napisz konkrety proszę.
Co zrobiłeś, w jaki sposób, jak wygląda Twój controller (1.,2.,3.,n.), jaki błąd dostajesz i jak się do tego odwołujesz Ten post edytował kpt_lucek 11.04.2015, 13:25:41 |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 22.03.2015 Ostrzeżenie: (0%)
|
Dostaje taki bład:
services.yml wygląda tak :
kontroler wygląda tak:
Ten post edytował Matrix12 11.04.2015, 13:39:21 |
|
|
|
Post
#10
|
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
To po pierwsze,
Pamiętaj o jeszcze jednej rzeczy, Rejestrując controller jako usługę (serwis), nie powinieneś (o ile pamiętam, to nie możesz) extendować Symfony\Bundle\FrameworkBundle\Controller\Controller, więc Wszystkie zależności dołączasz poprzez DI (wystrzegaj się wstrzykiwania całego container'a). |
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%)
|
Tworzenie DI dla controller to imo zla praktyka. Zrób sobie coś takiego:
i teraz normalnie w controller robisz np.
. Tutaj robisz
Trzymasz cała logike w takich "serwisach" (IMG:style_emoticons/default/wink.gif) Np. do doctrine robisz $this->container->get('doctrine')->getManager. W controllerze w którym "Zarządzasz" robisz:
Nie jest to do końca prawidłowe. Powinno unikać się wstrzykiwania całego kontenera usług, a jedynie to co potrzebujemy. Troche chaotycznie napisałem ponieważ jestem na uczelni. Jak coś to pytaj. Ten post edytował Forti 11.04.2015, 14:13:07 |
|
|
|
Post
#12
|
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Moim zdaniem, tworzenie controllerów jako usług ma swoje plusy i minusy. Do minusów możesz zaliczyć brak dostępu do każdego zarejestrowanego serwisu (usługi), bo nie ładujesz tam container'a. Plusem jest jasne sprecyzowanie zależności controllera, szybka weryfikacja poziomu złożoności logiki tam będącej, łatwiejsze testowanie jak i budowanie go pod konkretną funkcjonalność, dalej idąc tym tropem - przyspieszasz działanie, bo nie ładujesz mega wielkiego container'a do zależności, przez co sam obiekt jest lżejszy.
|
|
|
|
Post
#13
|
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 22.03.2015 Ostrzeżenie: (0%)
|
Jednak zdecydowałem tak jak radziłeś :
a service.yml wygląda tak :
natomiast wyświetla mi taki błąd :
|
|
|
|
Post
#14
|
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Jednak zdecydowałem tak jak radziłeś :
1. Robisz to błędnie, bo "class AdminController extends Controller" już Ci daje dostęp do container'a ($this->container->get(), lub aliasem $this->get()), tak więc tą kwestię możesz pominąć. 2. W jakim celu "AdminController" musi zawierać pozostałę CRUD'y (controllery)? Nie łatwiej utworzyć usługi (nie controllery, dedykowane serwisy zajmujące się konkretną funkcjonalnością), zarejestrowanie ich i używanie wedle potrzeb w innych usługach / controllerach? |
|
|
|
Post
#15
|
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 22.03.2015 Ostrzeżenie: (0%)
|
Poprzez AdminController chce odwoływać się do metod pozostałych crudów. Nie wiem czy rozumiem dobrze Twoją propozycję ale chyba masz to na myśli co ja chce osiągnąć. Jeżeli się mylę pokaż mi przykładową implementacje
|
|
|
|
Post
#16
|
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Chociażby tak, wtedy masz nie zależne usługi operujące na jakiejś konretnej funkcjonalności, chociażby News'ach. Zobacz dodatkowo: @see @see #pisane z palca# |
|
|
|
Post
#17
|
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 22.03.2015 Ostrzeżenie: (0%)
|
Powiedz mi w routingu lepiej używać adnotacji czy jednak config.yml ?
|
|
|
|
Post
#18
|
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Wedle uznania, ja używam adnotacji, bo jest wszystko w jednym i łatwiej tym zarządzać
|
|
|
|
Post
#19
|
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 22.03.2015 Ostrzeżenie: (0%)
|
Teraz spotykam się z kolejnym ograniczeniem.. Zastanowiłem się i wydaje mi się, że źle podchodzę do tego.. Bo mam kilka bundli np. NewsBundle(który zawiera kontrolery etc.) itd. Chciałem zarządzać tym z poziomu AdminBundle.. Ale czy to wgl ma sens ? Bo z drugiej strony w każdym z bundli w kontrolerach mam metody które są odpowiedzialne za administrowanie danymi bundlami. Czy może nie lepiej zrobić to tak, aby nie powielać dodatkowo kodu tylko w każdym z bundli dodać routing np. /panel/admin/delete( i to będzie odpowiedzialne za usunięcie newsla z bazy)? Jak to rozwiązać. Proszę o wskazówki !
|
|
|
|
![]() ![]() |
|
Aktualny czas: 10.01.2026 - 00:28 |