[SF][SF2][Symfony2] proste sprawy związane z architekturą |
[SF][SF2][Symfony2] proste sprawy związane z architekturą |
12.10.2013, 13:00:24
Post
#1
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
Pytanie 1.
Załóżmy, że chciałbym sprawdzić czy produkt jest w schowku, chciałbym użyć funkcji {% if product.inClipboard %} w twigu. Sprawdzanie polega na zbadaniu tablicy umieszczonej w sesji. Gdzie powinna się znajdować deklaracja tej funkcji? Encja wydaje mi się niewłaściwa bo potrzebuję dostępu do sesji i nie ma to nic wspólnego z bazą danych (o ile to jest kryterium). A więc repozytorium? Ale wtedy trzeba napisać trochę kodu żeby móc użyć tej funkcji w szablonach. Pytanie 2. Podobna sytuacja, produkt jest w relacji z encją "galeria", która jest w relacji z encją "zdjęcie". Potrzebne jest {% product.getMainImage %} w twigu. Gdzie powinna się znajdować deklaracja tej funkcji? Różnica polega na tym, że ustalenie main image polega na pobraniu pierwszego ze zdjęć w przypiętej galerii więc jest to tylko manipulacja bazą danych. |
|
|
12.10.2013, 13:36:38
Post
#2
|
|
Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) |
2. Chcesz sprawdzić czy kolekcja relacji pomiędzy obiektami jest pusta? Do tego nie potrzebujesz nic specjalnego. Jeśli coś innego, to patrz punkt 1 Ten post edytował pedro84 12.10.2013, 19:28:17 -------------------- Google knows the answer...
|
|
|
12.10.2013, 13:43:21
Post
#3
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
Dzięki:)
|
|
|
12.10.2013, 18:09:52
Post
#4
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
Ad. 1
Absolutnie nie repozytorium. Przecież musisz w takim wypadku dodać do repozytorium zależność od sesji. Moim zdaniem jest to zadanie dla obiektu schowek. Ad. 2 Jeśli do produktu jest przypisana tylko jedna galeria to ja proponowałbym główne zdjęcie pobierać getterem właśnie z galerii. |
|
|
12.10.2013, 18:25:09
Post
#5
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
Ad. 1 Rozumiem, ale chyba nie masz na myśli tworzenia encji w Entity/ prawda? To by oznaczało niepotrzebne tworzenie tabeli w bazie no i w sumie wróciłbym do punktu wyjścia i równie dobrze mógłbym tą obsługę wrzucić do encji produkt. Więc podejrzewam, że masz na myśli coś innego. Może to przegapiam, ale w dokumentacji nie znalazłem o tym informacji, ale w różnych zewnętrznych bundlach trafiam na katalog "Model" na równi z "Entity" i może chodzi o to? Jeżeli tak to czy jest gdzieś jakaś dokumentacja na ten temat? Kiedy tych klas używać, gdzie inicjować obiekty?
|
|
|
12.10.2013, 19:25:01
Post
#6
|
|
Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) |
Ad. 1 Absolutnie nie repozytorium. Przecież musisz w takim wypadku dodać do repozytorium zależność od sesji. Moim zdaniem jest to zadanie dla obiektu schowek. I co w tym złego? Jeśli potrzebujesz w repozytorium dostęp do jakiegoś serwisu to w jaki sposób go obejdziesz? Z drugiej strony, to nie jest w żaden sposób powiązane z bazą, więc repozytorium lepiej zostawić. Ad. 1 Rozumiem, ale chyba nie masz na myśli tworzenia encji w Entity/ prawda? To by oznaczało niepotrzebne tworzenie tabeli w bazie no i w sumie wróciłbym do punktu wyjścia i równie dobrze mógłbym tą obsługę wrzucić do encji produkt. Więc podejrzewam, że masz na myśli coś innego. Może to przegapiam, ale w dokumentacji nie znalazłem o tym informacji, ale w różnych zewnętrznych bundlach trafiam na katalog "Model" na równi z "Entity" i może chodzi o to? Jeżeli tak to czy jest gdzieś jakaś dokumentacja na ten temat? Kiedy tych klas używać, gdzie inicjować obiekty? @destroyerr'owi chodziło zapewne o to, żeby taka funkcjonalność była zawarta w klasie obsługującej schowek, czyli de facto samym obiekcie schowka. Ten post edytował pedro84 12.10.2013, 19:27:53 -------------------- Google knows the answer...
|
|
|
12.10.2013, 19:51:38
Post
#7
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
@destroyerr'owi chodziło zapewne o to, żeby taka funkcjonalność była zawarta w klasie obsługującej schowek, czyli de facto samym obiekcie schowka. Ale rzecz w tym, że właśnie nie mam obiektu schowka, stąd ten przykład - schowek jest niezwiązany z bazą bo polega tylko na obsługiwaniu sesji. W związku z tym tworzenie encji, z której powstanie tabela wydaje się trochę nadmiarowe. |
|
|
12.10.2013, 19:53:51
Post
#8
|
|
Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) |
Ale rzecz w tym, że właśnie nie mam obiektu schowka, stąd ten przykład - schowek jest niezwiązany z bazą bo polega tylko na obsługiwaniu sesji. W związku z tym tworzenie encji, z której powstanie tabela wydaje się trochę nadmiarowe. Ale nikt nie mówi o tworzeniu encji. Mówimy o obiekcie schowka, za pomocą którego tymże manipulujesz. W jaki sposób dodajesz elementy do schowka? -------------------- Google knows the answer...
|
|
|
12.10.2013, 20:02:35
Post
#9
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
Trzymam tablicę w sesji i pobieram ją w kontrolerze z sesji, modyfikuję i zapisuję do sesji ponownie czyli operuję na tablicy.
A jak mogę stworzyć obiekt schowka nie w postaci encji? |
|
|
12.10.2013, 20:06:19
Post
#10
|
|
Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) |
A jak mogę stworzyć obiekt schowka nie w postaci encji? Po prostu: tworzysz sobie klasę, np. CartManager, w niej definiujesz wszystkie potrzebne Ci składowe. Tworzysz serwis w SF2, wstrzykujesz sobie wszystkie zależności i już. Taka manipulacja jest o wiele lepsza niż to co robisz do tej pory. Dodatkowo, jak wspomniałem w pierwszym poście, tworzysz sobie funkcję Twiga, do której wstrzykujesz swój serwis schowka i voila -------------------- Google knows the answer...
|
|
|
12.10.2013, 20:09:35
Post
#11
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
A gdzie jest odpowiednia lokalizacja dla takiej klasy?
|
|
|
12.10.2013, 20:14:21
Post
#12
|
|
Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) |
Oczywiście w odpowiednim bundlu, np. AppBundle\Cart\CartManager, ale to tylko przykład. SF2 naprawdę daje Ci elastyczność.
BTW. Czytaj dokumentację do poduszki -------------------- Google knows the answer...
|
|
|
12.10.2013, 20:27:48
Post
#13
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
Ale ja mam już Bundle i ten koszyk działa tylko wewnątrz niego i jest to malutka funkcja, nie ma chyba sensu tworzyć specjalnie dla niego osobnego Bundla. Obecnie moje pytanie brzmi do jakiego katalogu mam wrzucić klasę Cart.php bo raczej nie jest to Entities/ - czy mam sobie stworzyć dowolnie jakiś katalog? Np. MyClasses?
|
|
|
12.10.2013, 20:53:51
Post
#14
|
|
Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) |
Napisałem Ci już wyżej, AppBundle to nazwa Twojego bundla. Nie mówię, żebyś do samego koszyka tworzył bundle (ale w sumie, czemu nie? ). Katalog MyClasses jest bez sensu, nazywaj katalogi i klasy rozsądnie i opisowo.
-------------------- Google knows the answer...
|
|
|
12.10.2013, 21:38:50
Post
#15
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
Sorry, nie doczytałem nazwy bundla.
Czyli mogę sobie zrobić dowolny katalog wewnątrz bundla na "luźne" klasy i nie ma żadnego wyspecjalizowanego na to tak jak np. Entity/ albo Form/ są wyspecjalizowane? Chcę się upewnić bo to mi się wydaje jakieś takie niepasujące do skonwencjonalizowanej struktury Symfony... Ten post edytował Foxx 12.10.2013, 21:39:55 |
|
|
12.10.2013, 21:58:12
Post
#16
|
|
Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) |
Sorry, nie doczytałem nazwy bundla. Czyli mogę sobie zrobić dowolny katalog wewnątrz bundla na "luźne" klasy i nie ma żadnego wyspecjalizowanego na to tak jak np. Entity/ albo Form/ są wyspecjalizowane? Chcę się upewnić bo to mi się wydaje jakieś takie niepasujące do skonwencjonalizowanej struktury Symfony... Czy jeden katalog na wiele własnych klas? Z doświadczenia mogę Ci powiedzieć, że lepiej od początku porządkować wszystko, przyjmując sensowną strukturę plików/katalogów. Jeśli zaś chodzi tylko o możliwości, a nie to czy jest to właściwie, to tak, możesz. -------------------- Google knows the answer...
|
|
|
12.10.2013, 22:03:32
Post
#17
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
Okej, dzięki.
A co do pytania to nie jestem pewien, czy dobrze je rozumiem, ale jeden katalog często ma wiele własnych różnych klas, np. Entity zawiera wszystkie obiekty związane z bazą, niekoniecznie związane ze sobą nawzajem. Więc chyba nie będzie niewłaściwe stworzenie katalogu np. "Objects" w którym umieszczę wszystkie klasy, których instancji będę potrzebował i które będą specyficzne tylko dla mojej aplikacji. |
|
|
12.10.2013, 22:11:32
Post
#18
|
|
Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) |
Zauważ tylko, że zarówno katalog Entity, jak i Form, Model, Controller mają określone i jasne zasady, co do tego jakie pliki powinny być tam przechowywane. Poza tym, już sama nazwa jest skonkretyzowana. Zobacz, że w przypadku katalogu form, struktura jego podkatalogów jest samo-wyjaśniająca, np. Form, Form\Type, Form\Handler.
SF daje Ci elastyczność, jak Ty ją wykorzystasz, zależy już od Ciebie. Zastanawia mnie też ile oraz jakie klasy masz, że chcesz je wszystkie pakować do jednego katalogu. -------------------- Google knows the answer...
|
|
|
12.10.2013, 22:38:47
Post
#19
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) |
Szczerze to nie mam ich aktualnie wiele, jedynie ten koszyk byłby kandydatem. Ale wyobrażam sobie że w większym projekcie miałbym ich więcej. Pamiętajmy, że pomysł z osobnym katalogiem wyszedł jako odpowiedź na moje pytanie czy jest jakieś konkretne, określone dokumentacją miejsce przeznaczone na takie rzeczy.
|
|
|
13.10.2013, 15:23:00
Post
#20
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
Cytat I co w tym złego? Jeśli potrzebujesz w repozytorium dostęp do jakiegoś serwisu to w jaki sposób go obejdziesz? Z drugiej strony, to nie jest w żaden sposób powiązane z bazą, więc repozytorium lepiej zostawić. Złe jest dlatego, że nadajesz repozytorium kolejną zależność (musisz tą zależność dostarczać przy pisaniu testów). Dodatkowo obciążając to repozytorium kolejnym zadaniem. Co gorsze zależność ta jest związana z jednym z kontekstów uruchamiania aplikacji (http), jeśli chciałbyś takie repozytorium wykorzystać podczas uruchamiania aplikacji z konsoli to masz problem. @Foxx uważasz, że dokumentacja Symfony2 powinna przewidywać wszystkie możliwe klasy do obsługi czegokolwiek i podawać programistom w jakich folderach mają być? Musisz mieć obiekt koszyka i koniec. Operowanie na tablicach, wrzucanie jakiś indeksów zwiększanie ilości, gdzieś po kontrolerach jest śmieszne, ciężkie w testowaniu i jest proszeniem się o problemy. Jeśli zastanawiasz się gdzie umieścić taką klasę (a i nie zastanawiaj się w jakim folderze tylko w jakiej przestrzeni nazw) to posłuchaj pedro84 utwórz przestrzeń nazw/folder Cart. Tylko teraz już nie słuchaj pedro84 (to oczywiście tylko moje zdanie) i nie twórz klasy CartManager tylko po prostu Cart. |
|
|
Wersja Lo-Fi | Aktualny czas: 21.09.2024 - 20:30 |