![]() |
![]() |
![]()
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. -------------------- Nawet, jeżeli nie jesteś zainteresowany usługami IT ani outsourcingiem, a Twoją pasją jest programowanie - zobacz naszą stronę. Piszemy dużo fajnych use-caseów, jak podchodzimy do tematu programowania dla naszych klientów. A tak na co dzień tworzymy budujemy mvp oraz tworzymy platformę b2b.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 20 Dołączył: 17.01.2009 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie robi się tak jak napisał Matix. Wewnątrz encji nie używa się żadnych usług.
Ja też używam DoctrineExtensionBundle. Ale slug jest dość standardowy a dla innych mniej standardowych rzeczy robi się to po przez: http://symfony.com/doc/current/cookbook/do...ubscribers.html Czyli tworzysz subscriber lub listenera Doctrine. Rejestrujesz go jako usługę. Np listenera PrePersist - do tego listenera wstrzykujesz swoją usługę Converter. Sprawdzasz w PrePersist typ obiektu, jeśli typ pasuje, to wtedy ustawiasz mu sluga lub cokolwiek innego przy pomocy twojej usługi Converter.
PS: Oczywiście metoda slugify nie jest statyczna i nie powinna być statyczna ![]() Ten post edytował ziolo 8.10.2014, 16:15:28 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
http://symfony.com/doc/current/cookbook/do...ubscribers.html
+ http://symfony.com/doc/current/cookbook/se...t_listener.html i wy tych klasach mozesz sobie robic wszystko. -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Ja zacznę od tego, że swoich klas wcale nie musisz wrzucać do bundla. Mogą sobie pozostać poza nim. Dodatkowo, jeżeli Ci to wystarcza, to możesz dalej korzystać z metody statycznej lub zwykłej funkcji. W opozycji do pomysłu ze zdarzeniami, jeżeli nie lubisz żeby model był związany z frameworkiem to proponuję następujące rozwiązanie:
Co do korzystania z menedżerów to nie polecam. Prowadzi to często do obiektów które wykonują wiele zadań. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 22:51 |