Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Symfony2] Entity - metody pomocnicze
Damiankossek
post
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 8
Dołączył: 10.12.2009

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


Witam, zacząłem 'studiować' framework Symfony 2 i mam pierwszę pytanie. Stworzyłem entity User - jak wszędzie czytam - entity powinno być zbiorem tylko setterów oraz getterów. Czy mogę w jednej instancji obiektu mieć settery, gettery oraz mieć własne metody pomocnicze typu "sendNewAccountEmail()" które mają dostęp do usług (services - mailer, itp.) bo entity niestety w standardzie chyba nie ma dostępu do usług?

W Magento jest to rozwiązane bardzo fajnie:

  1. // pobieram instancję modelu customer
  2. $customer = Mage::getModel('customer/customer');
  3. // ładuje użytkownika o ID 1
  4. $customer->load(1);
  5. // w tym momencie wysyłany jest email do użytkownika
  6. $customer->sendNewAccountEmail('registered');
  7. // w tym momencie zmieniam imie uzytkownika (bez zapisu do bazy)
  8. $customer->setFirstame('Jan');
  9. // w tym momencie zapisuje dane do bazy
  10. $customer->save();


Mam poprostu instancje customer która ma wszystkie settery, gettery związane z bazą danych oraz metody pomocnicze które mogą korzystać z tych danych.

Jak to rozwiązać w symfony aby było prawidłowo i przyjemnie? Chodzi też o elastyczność. Rozwiązanie powinno też pozwalać na to aby dodanie nowej kolumny wiązało się ze stworzeniem kolumny w bazie danych, dodanie settera oraz gettera do entity i w zasadzie to wszystko. Poprostu teraz znalazłem jedyne rozwiązanie w którym tworze model, wstrzykuje entity i wtedy mogę kombinować ale niestety dodanie w przyszłości nowych kolumn będzie wiązało się z dodawaniem już setterów,getterów zarówno w modelu oraz entity. Czy to prawidłowa droga? Wydaje mi się że to mało wygodne. Idealnym miejscem na to wszystko jest bezpośrednio Doctrine ENTITY ale wg. konwencji to tylko zbiór setterów i getterów a na dodatek bez dostępu do usług.

Ten post edytował Damiankossek 9.12.2014, 09:10:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


To nie są metody "pomocniczne" tylko dosyć złożona warstwa logiki aplikacji, która zapewne sama w sobie ma sporo zależności - nie chcesz tego w prostym obiekcie typu Encja, który ma jedynie reprezentować jakąś względnie podstawową jednostkę danych.

Utwórz sobie odpowiednią usługę, która jako argument metody sendNewAccountEmail() przyjmie obiekt typu User i wyśle maila dla przekazanego użytkownika.
Go to the top of the page
+Quote Post
Damiankossek
post
Post #3





Grupa: Zarejestrowani
Postów: 118
Pomógł: 8
Dołączył: 10.12.2009

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


Wiem czym są metody pomocnicze (helpery) a czym złożona warstwa logiki (zazwyczaj modele). W Magento mam w zasadzie wszystkie operacje związane z customerem w obrębie jednego obiektu (oczywiście nie liczę tego że wewnątrz customera pobierane są kolejne instancje innych obiektów). Czyli twoje rozwiązanie to tak naprawdę to o czym wcześniej mówiłem, muszę stworzyć usługę np. UserManager, wstrzyknąć w nią entity usera i dopiero tam pisać bardziej złożone rzeczy.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.12.2025 - 18:03