• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Budowa sklepu w Symfony 7

Object Storage Arubacloud
+2 głosów
121 wizyt
pytanie zadane 3 kwietnia w PHP przez Panelinio Gaduła (3,210 p.)

Hej

Postanowiłem pouczyć się bardziej Symfony (pracuję na wersji 7 w systemie Windows przy pomocy Xamppa). Za aktualny projekt obrałem sobie stworzenie sklepu internetowego. Niestety przeszukując poradniki i inne czeluści internetu nie mogę znaleźć jak się dokładnie zabrać za taki sklep.
Korzystałem z tego poradnika, ale jak się okazało był on kreowany dla Symfony 5. Wykorzystywano tam sesje, a te niby zostały usunięte w wersji 6.
Jeśli coś namieszałem to proszę o wyprowadzenie mnie z błędu i polecenie mi jak mogę dokładnie zabrać się za ten projekt (na ten moment nawet nie wiem czy Dockera odpowiednio ustawiłem).
Przesyłam repo projektu.

1 odpowiedź

+3 głosów
odpowiedź 3 kwietnia przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 5 kwietnia przez Panelinio
 
Najlepsza
Tak w zasadzie, to nie do końca wiem jak odpowiedzieć. Ciężko ogólnie powiedzieć jak dokładnie zabrać się za taki projekt, bo sklep to pod spodem może być masa różnych funkcjonalności i nie wiem z którą masz problem w jakim konkretnie miejscu, a z którą nie.

Jeśli chodzi konkretnie o mechanizm sesji, nie wydaje mi się, aby cokolwiek było usunięte, może najwyżej gdzieś nieco zmienione. W przypadku zalinkowanego poradnika w 5 części autor pokazuje coś na temat sesji, podobny kod widzę u Ciebie, który fragment masz więc na myśli? Tam w klasie CartSessionStorage wstrzykiwana przez konstruktor jako zależność jest klasa RequestStack dostarczona przez Symfony, wg dokumentacji dla wersji 7 dokładnie taka klasa nadal istnieje, pokazane jest to już na początku tematu o sesjach: https://symfony.com/doc/current/session.html#basic-usage Następnie na requestStack wywoływana jest metoda getSession(), a na tym obiekcie później metody get() i set() co również pokrywa się z tym co ja pamiętam oraz z dokumentacją. Z czym więc konkretnie masz tu problem? Jest jakiś błąd, coś konkretnego nie działa?

Jeśli chodzi o Dockera, to masz dwa pliki - docker-compose.yaml i compose.yaml, gdzie obydwa dodają bazę danych, tyle że każdy zupełnie inną, raz Postgresa a raz MySQL. Plik konfiguracji .env z kolei wskazuje na jeszcze inną używaną bazę, MariaDB. Dalej masz też dwie migracje, gdzie składnia sugeruje, że jedna jest zrobiona pod MySQL/Maria, a druga raczej pod Postgresa. Wygląda to więc na spory bałagan.

Dalej odnośnie Dockera, masz tu kontener dla bazy danych, a gdzie kontener w którym uruchomi się PHP? Z tego co zerknąłem, to autor zalinkowanego poradnika też go nie ma. Nie wiem czy można nazwać to błędem, ale wg mnie jak już chcemy fajnie i łatwo przenosić czy niezależnie konfigurować aplikację na Dockerze to, jeśli to możliwe, powinien być komplet usług do uruchomienia, a nie tak, że część stawiamy z Dockera, a część trzeba i tak sobie doinstalować.

Przy okazji jeszcze katalogi var oraz vendor nie powinny być zacommitowane do repozytorium na Githubie. var to rzeczy, które aplikacja generuje sobie na danym środowisku (cache, logi i inne), a vendor to zewnętrzne biblioteki, które dzięki plikom composer.json/lock w każdej chwili da się odtworzyć przy użyciu Composera. Dodawanie ich do repozytorium w taki sposób powoduje tylko bałagan.
komentarz 4 kwietnia przez Panelinio Gaduła (3,210 p.)

Dziękuję ślicznie za porady
Chciałem poznać od kuchni jak zbudować prosty sklep w Symfony, na zasadzie dodania przez admina produktów, które user może kupić. Ciekawi mnie też późniejsze podłączenie płatności i innych takich, ale na ten moment chciałem poznać podstawy. Zależało mi na trzymanie się możliwie jak najnowszych rozwiązań, aby być "na czasie". Wiadomo, jakieś zabezpieczenia czy sprytniejsze i szybsze możliwości budowy, aby przyszły zleceniodawca nie powiedział "Nie no, przestarzałe masz sposoby młody". Dlatego zależało mi na krokach opartych o najnowszą wersję Symfony.

Generalnie ujmując nie wiedziałem czy dobrze postępuję. Przyzwyczajony jestem, że jak tworzę encje to używam komendy - myślałem, że tak trzeba też robić w przypadku sesji i modelu. W każdym bądź razie pokazywał mi się też błąd w kodzie:
Kolejno są to niezdefiniowana klasa constant i niezdefiniowany typ. Zauważyłem, że nie posiadam czegoś takiego jak App\Factory\Orderfactory, a nic takiego autor poradnika nie podawał.

Z Dockerem to pewnie ja coś namieszałem porządnie. Wpierw w pliku .env podłączyłem kod do bazy na XAMPP'ie, z kolei plik docker-compose.yaml sam utworzyłem według poradnika, a compose.yaml sam się stworzył wraz ze szkieletem. Dockera używam przez aplikację desktopową, więc pewnie to też błąd. W podobnym przypadku mam Githuba, też jest on u mnie aplikacją desktopową. Nie mogłem się podłączyć do swojego repo w pierwszym projekcie, dlatego posiłkowałem się rozwiązaniem "przeciągnij, upuść, zaloguj się, scomittuj, pushnij".
I też muszę nauczyć się comittować wybrane pliki, nie wszystkie jak na to wygląda.

1
komentarz 4 kwietnia przez Arkadiusz Waluk Ekspert (287,950 p.)
Tworzenie encji przy użyciu komendy to nic złego, wg mnie od tego to jest, aby sobie życie ułatwiać. Tak samo są inne rzeczy, które mogą Ci coś wygenerować. Tyle że to generuje podstawowy schemat szablonowych rzeczy, tak więc wszystkiego nie będziesz w stanie wygenerować komendą. Komenda sama nie wymyśli jak ma zachowywać się obsługa sesji, co ma się i jak dodawać do koszyka i tak dalej :)

Odnośnie pierwszego problemu ze STATUS_CART chodzi o brak stałej w klasie Order. Spójrz sam, że u Ciebie w kodzie nie ma takiej stałej. W poradniku za to jest ona dodawana: https://dev.to/qferrer/creating-cart-entities-building-a-shopping-cart-with-symfony-h90 sekcja "Setting the default Order status". Podejrzewam, że wygenerowałeś encję Order komendą i dlatego to przegapiłeś, ale jak wyżej - komenda tylko wygeneruje Ci jakiś domyślny zarys, w razie potrzeby trzeba to dostosować pod siebie, tutaj autor poradnika akurat użył sobie stałej. Drugi problem czyli brak OrderFactory- taka klasa jest dodawana w tej samej części poradnika na samym dole, sekcja "Creating the Factory". To oczywiście nie musi być zrobione koniecznie tak, można zapisać kod na różne sposoby, ale jeśli chcesz, aby w takiej formie działało, to faktycznie musisz takową klasę dodać.

Użycie Dockera przez aplikację desktopową nie brzmi jak błąd. Na pewno warto wiedzieć też mniej więcej jak go obsłużyć z konsoli, to się może przydać, gdy interfejs będzie miał problem, nie będzie czegoś obsługiwał albo po prostu będziesz musiał zrobić coś np. na serwerze, gdzie częściej klikalnych aplikacji nie ma. Jeśli już się coś wie i chce sobie tym ułatwić obsługę, to nie widzę problemu. W Twoim przypadku zdecydowałbym się jednak na utworzenie jednego pliku docker-compose.yaml i tam stworzenie jednego kontenera z PHP oraz drugiego z wybraną bazą danych. Efekt powinien być wg mnie taki, że ja mógłbym teraz pobrać Twoje repozytorium, wywołać `docker compose up` i w zasadzie aplikacja powinna być gotowa do pracy bez dodatkowego instalowania PHP, bazy czy innych rzeczy przeze mnie u siebie na komputerze.

W kwestii Gita podobnie, warto go umieć obsłużyć z konsoli, ale samo wspomaganie się interfejsem graficznym nie jest szczególnym problemem. Sam to robię do bardziej złożonych rzeczy typu rozwiązanie konfliktów, bo tak jest mi po prostu wygodniej. Poczytaj o pliku .gitignore, bo to jest to czego potrzebujesz. Nie ma sensu ręcznie pilnować, które pliki należy zacommitować a które nie, zamiast tego we wspomnianym pliku wskazujesz pliki czy katalogi, które Git ma zupełnie ignorować i uniemożliwić ich dodanie. Nie zapomnij tylko o tym, że gdy masz już dodane wybrane katalogi do repozytorium, to samo dodanie ich do .gitignore ich automatycznie z niego nie usunie - trzeba to zrobić dodatkowo ręcznie przez git rm.

Jeśli chodzi o płatności, to przeważnie używa się gotowych bibliotek danego dostawcy typu np. PayU czy Przelewy24, które się integruje u siebie w kodzie i odpowiednio reaguje na dane zdarzenia.
1
komentarz 5 kwietnia przez Panelinio Gaduła (3,210 p.)

Dziękuję Ci serdecznie za tak świetnie wytłumaczenie heart
Niby wszystko jako tako rozumiałem, tylko nie potrafiłem tego posegregować należycie. Dzięki raz jeszcze laugh

Podobne pytania

0 głosów
1 odpowiedź 341 wizyt
0 głosów
2 odpowiedzi 1,066 wizyt
pytanie zadane 26 czerwca 2017 w PHP przez JokerJESUS Użytkownik (750 p.)

92,525 zapytań

141,357 odpowiedzi

319,388 komentarzy

61,914 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...