Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [SF][SF2][Symfony2] proste sprawy związane z architekturą
Foxx
post 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.

Go to the top of the page
+Quote Post
pedro84
post 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%)
-----


1. Jak dla mnie: repozytorium + funkcja Twig. Sorry, głupota wink.gif
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 wink.gif

Ten post edytował pedro84 12.10.2013, 19:28:17


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
Foxx
post 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:)
Go to the top of the page
+Quote Post
destroyerr
post 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.
Go to the top of the page
+Quote Post
Foxx
post 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?
Go to the top of the page
+Quote Post
pedro84
post 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%)
-----


Cytat(destroyerr @ 12.10.2013, 19:09:52 ) *
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ć.

Cytat(Foxx @ 12.10.2013, 19:25:09 ) *
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...
Go to the top of the page
+Quote Post
Foxx
post 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%)
-----


Cytat(pedro84 @ 12.10.2013, 20:25:01 ) *
@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.
Go to the top of the page
+Quote Post
pedro84
post 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%)
-----


Cytat(Foxx @ 12.10.2013, 20:51:38 ) *
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...
Go to the top of the page
+Quote Post
Foxx
post 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?
Go to the top of the page
+Quote Post
pedro84
post 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%)
-----


Cytat(Foxx @ 12.10.2013, 21:02:35 ) *
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 wink.gif


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
Foxx
post 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?
Go to the top of the page
+Quote Post
pedro84
post 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 wink.gif


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
Foxx
post 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?
Go to the top of the page
+Quote Post
pedro84
post 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? wink.gif). Katalog MyClasses jest bez sensu, nazywaj katalogi i klasy rozsądnie i opisowo.


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
Foxx
post 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
Go to the top of the page
+Quote Post
pedro84
post 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%)
-----


Cytat(Foxx @ 12.10.2013, 22:38:50 ) *
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...
Go to the top of the page
+Quote Post
Foxx
post 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.
Go to the top of the page
+Quote Post
pedro84
post 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...
Go to the top of the page
+Quote Post
Foxx
post 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.
Go to the top of the page
+Quote Post
destroyerr
post 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.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 22:53