Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2] Entity - metody pomocnicze
Forum PHP.pl > Forum > PHP > Frameworki
Damiankossek
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.
Crozin
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.
Damiankossek
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.
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.