[PHP][SF2][Symfony2]Korzystanie z serwisu poza kontrolerem |
[PHP][SF2][Symfony2]Korzystanie z serwisu poza kontrolerem |
21.03.2016, 19:57:10
Post
#1
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 5 Dołączył: 4.12.2013 Skąd: Śląsk Ostrzeżenie: (0%) |
Witam, mam dosyć banalny problem:
chcę wywoływać zapytania z poziomu modelu zamiast kontrolera, oczywiście w kontrolerze nie jest to problem, ponieważ mamy metodę getDoctrine(). Jako, że wywoływanie owego obiektu zamierzam używać w wielu modelach postanowiłem utworzyć obiekt ParentModel z którego będą poszczególne dziedziczyć. przykład:
DefaultModel:
ParentModel:
Services.yml:
Wg tego co znalałem w internecie wszystko powinno ładnie działać: routing wywołuje kontroler, w kontrolerze tworzę instancję obiektu, który w rodzicu tworzy $em, który jest niezbędny do zapytań, ale (oczywiście) tak nie jest.
Tutaj pytanie: co w poszczególnych krokach zrobiłem źle, że pojawia się owy błąd zamiast poprawnie wykonać kod? (Czy fakt dodania wpisu w service nie powinien powodować uniknięcie owego błędu?) Chcę unikać przekazywania z kontrolera $em do modelu. Tutaj mam jeszcze rozkwinę odnośnie działania Symfony: Jeżeli framework szczyci się MVC to dlaczego zapytania domyslnie możemy tworzyć w kontrolerze? (Do tej pory zawsze spotykałem się z strukturą: kontroler wywołuje metodę z modelu w której jest owo zapytanie składane, model zwraca gotowe dane do kontrolera). |
|
|
21.03.2016, 20:44:31
Post
#2
|
|
Grupa: Zarejestrowani Postów: 618 Pomógł: 143 Dołączył: 22.12.2010 Ostrzeżenie: (0%) |
Tutaj mam jeszcze rozkwinę odnośnie działania Symfony: Jeżeli framework szczyci się MVC to dlaczego zapytania domyslnie możemy tworzyć w kontrolerze? (Do tej pory zawsze spotykałem się z strukturą: kontroler wywołuje metodę z modelu w której jest owo zapytanie składane, model zwraca gotowe dane do kontrolera). To tak, symfony2(/3) nigdy nie był definiowany jako framework MVC, sam twórca o tym wspomina http://fabien.potencier.org/what-is-symfony2.html Kolejna rzecz, to owszem, możesz sobie tworzyć zapytania w kontrolerze (taka swoboda), ale raczej powinieneś tworzyć je w Repository. Model, a raczej Entity, służy do mapowania danych z bazy (i w drugą stronę). Resztę logiki powinieneś zawrzeć w kontrolerze (i ewentualnie poszczególnych serwisach) Przejrzyj sobie przykładowe demo https://github.com/symfony/symfony-demo i powinieneś mniej więcej zrozumieć logikę symfony. Apropos Twojego kodu, to musiałbyś DefaultModel zarejestrować jako service i wstrzykiwać mu EntityManagera, wtedy w kontrolerze możesz sobie pobrać serwis przez $this->get('userbundle.model.default_model'); Ten post edytował ohm 21.03.2016, 20:46:50 |
|
|
22.03.2016, 14:25:44
Post
#3
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 5 Dołączył: 4.12.2013 Skąd: Śląsk Ostrzeżenie: (0%) |
Dzięki za wyjaśnienie oraz linki, w końcu przeskoczyłem ten błąd w rozumowaniu i wszystko stało się znacznie jaśniejsze (finalnie zapytania przeniosłem do NazwaEncjiRepository, utworzyłem folder utils, którego pliki po przez serwis można odczytywać).
|
|
|
Wersja Lo-Fi | Aktualny czas: 28.03.2024 - 16:13 |