Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony2][Symfony]Używanie własnych klas w Entity
athabus
post
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.
  1. $this->get('Converter')->slugify($name);


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
matix
post
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:
  1. public function updateAction(Request $request, Page $page)
  2. {
  3. $this->get('page.manager')->parsePage($page);
  4. $this->getDoctrine()->getManager()->flush($page);
  5.  
  6. // ...
  7. }


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.
Go to the top of the page
+Quote Post

Posty w temacie


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: 18.10.2025 - 08:11