![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Dalej uczę się korzystać z Symfony i chciałby zrobić pewne rzeczy "ładnie". Na dzisiaj mam Zestaw swoich klas, które często używam w różnych projektach. Pomyślałem, żeby zrobić sobie z nich bundla Dajmy na to AcmeUtilBundle.
Mam w nim klasę Converter i metodę statyczną slugify. Ok i co dalej? Rozumiem, że mogę sobie zdeklarować Service i używać wszystkiego w kontrolerze np.
Jak jednak użyć ładnie tych metod w Entity, żeby np. podczas ustawiania pola name od razu generować slug? A może w ogóle źle zabieram się do tego problemu? Ten post edytował athabus 8.10.2014, 14:54:13 |
|
|
![]() |
![]() ![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 10 Dołączył: 13.02.2007 Skąd: Rybnik Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
Tak i nie. Generalnie do generowania sluga (zakładam, że mówisz o encjach, czyli korzystasz z Doctrine2) używa się DoctrineExtensionBundle i zachowania Sluggable. Masz jeszcze NestedSet (do generowania drzewa) i kilka innych, bardzo fajnych zachowań. Domyślam się, że masz nie tylko klasę do do generowania slugów, więc najbardziej Symfony2 way: 1) Jeżeli chcesz wykonać jakieś operacji na encji - robisz metodę w encji, ALE TYLKO WTEDY GDY NIE POTRZEBUJESZ INNYCH ZEW. KLAS, 2) Jeżeli chcesz wykonać jakąś operację na encji, lecz potrzebujesz innej klasy do tego wtedy kod ten powinien być zadeklarowany jako usługa, manager. Example dla punktu 1 Masz koszyk (encja Cart) oraz produkty do niego dodane (CartItem). Chcesz policzyć sumaryczny koszt wszystkich produktów w koszyku. Tworzysz w encji Cart metodę getTotalNetPrice() [na przyklad] i tam robisz petle po wszysktich CartItem (oczywiscie joinujemy wtedy CartItem ;-) i dodajesz kwoty * quantity, zwracasz. Najważniejsze jest to, że nie potrzeba Ci tutaj żadnej zewnętrznej biblioteki. Example dla punktu 2 Chcesz np. podświetlić kod PHP w ramach jakiegoś artykułu. Potrzebujesz do tego: np. encji Page oraz klasy obsługującej podświetlanie składki, parsującej content. W tym momencie potrzebujesz usługi/managera (ja wolę określenie Manager) - PageManager. Deklarujesz go jako usługe pod aliasem np. "page.manager". W tym momencie w kontrolerze w którym wyświetlasz / lub lepiej - edytujesz content masz cos takiego:
Czyli wyciagasz logikę poza encję, po czym flush następuje z poziomu controllera / lub np. eventu, ale o tym już nie będę się rozpisywał więcej. Nie wiem czy dostatecznie wyjaśniłem o co chodzi. Pozdrawiam, M. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.10.2025 - 08:11 |