Aktywne Wpisy
![GlenGlen12](https://wykop.pl/cdn/c0834752/43879a9e754f0b26cf0a8938414b6f0827a8cc87ccb527cc526983eb5d1ed80d,q60.png)
GlenGlen12 +57
Ceny wszystkiego tak bardzo odjeżdżają już od "normalnych" pensji, że człowiek nie jest tego w stanie nadgonić nawet rozwijając się czy pracując na 1,5 etatu.
15k/m2 mieszkania, gałka lodów 8 zł, mały crossaint 15 zł, zjedzenie w średniej restauracji dla 2 osób z napojami lekko przebija 200zł, paczka Laysów dochodzi do 10 zł, barber czy fryzjer zaczyna się od 70 zł, kończy na 100.
Mam wrażenie, że dla Polski pre-pandemiczne lata (2017-2019)
15k/m2 mieszkania, gałka lodów 8 zł, mały crossaint 15 zł, zjedzenie w średniej restauracji dla 2 osób z napojami lekko przebija 200zł, paczka Laysów dochodzi do 10 zł, barber czy fryzjer zaczyna się od 70 zł, kończy na 100.
Mam wrażenie, że dla Polski pre-pandemiczne lata (2017-2019)
![GlenGlen12 - Ceny wszystkiego tak bardzo odjeżdżają już od "normalnych" pensji, że cz...](https://wykop.pl/cdn/c3201142/9220d806b2523cb1ce2df27c99c67a378f9c307c10976fc94c81bcc4035d8154,w150.png?author=GlenGlen12&auth=7f643254f282e6440fa5e45eb0c216ec)
źródło: pieniadze
Pobierz![IntruderXXD](https://wykop.pl/cdn/c3397992/IntruderXXD_I0GwP44ES0,q60.jpg)
IntruderXXD +618
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ・ 。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ∴。
⠀⠀⠀・゚*。.
⠀⠀⠀⠀⠀⠀⠀ ・ *゚
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀・ ゚*
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ・。
⠀⠀⠀⠀⠀⠀⠀⠀*・。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ *.。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。・
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ゚*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。。 ・
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。 ・゚
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。*・。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ∴。
⠀⠀⠀・゚*。.
⠀⠀⠀⠀⠀⠀⠀ ・ *゚
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀・ ゚*
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ・。
⠀⠀⠀⠀⠀⠀⠀⠀*・。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ *.。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。・
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ゚*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。。 ・
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。 ・゚
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。*・。
![IntruderXXD - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ・ 。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ∴。
⠀⠀⠀・゚*。.
⠀⠀⠀⠀⠀⠀⠀ ・ *゚
⠀⠀⠀⠀⠀⠀...](https://wykop.pl/cdn/c3201142/97a9df949698fee5063844690989c61d7c985dd91c8d36c3f385af031ad1b98a,w150.jpg?author=IntruderXXD&auth=6e5973058aa50852add07eee18139d23)
źródło: 2362362_211
Pobierz
Tworzę w pracy stronkę, gdzie ma być sklep elektroniczny. Napisałem sobie serwis, gdzie tworzę zamówienie, dodaję produkty do zamówienia, pobieram informację o zamówieniu, cenę itd.
Jednak z powodu braku doświadczenia nie robię tego w odpowiedni sposób. W poprzedniej pracy widziałem jak takie coś było zrobione przez doświadczoną osobę i to mniej więcej wyglądało tak:
$this->getOrder()->getPrice()
- aby pobrać cenę.$this->getOrder()->getStatus()
- aby pobrać status zamówienia.U mnie to raczej wygląda tak, że pobieram serwis przy pomocy
$service = $this->get('app.order');
następnie wywołuję metodę:
$service->getPrice();
Nie wiem czy moje rozwiązanie jest w porządku, czy jednak pasowałby ten wariant, który podałem na początku. W pracy nie bardzo mam się kogo poradzić, a samemu brakuje mi doświadczenia z programowaniem obiektowym, więc pytam na mirko. Nie proszę o napisanie za mnie kodu, a tylko wskazanie jak ma wyglądać struktura takiego serwisu. Może to być nawet link do tutoriala.
Załączam swój kod w serwisie: https://gist.github.com/miedzwin/f7dbd4ee0cc4abfd37cb79d23ba4ab8e
#php #webdev #programowanieobiektowe #symfony2
Z pewnością jednak polecę Ci choć pobieżne przejrzenie kodu "większych" e-commerce pisanych w SF2:
https://github.com/Sylius/Sylius
https://github.com/thelia/thelia
Nie pod kątem użycia ich (bo przy mini stronce to będzie strzelanie z armaty do wróbla) - ale sposobu implementacji, jaki przyjęło większe community.
Poczytaj sobie o zasadach SOLID, może obejrzyj jakąś prezentację z konferencji na yt.
Twój "OrderService" łamie bardzo wiele tych zasad. W programowaniu obiektowym nie powinieneś mieć takiego "serwisu" który robi wszystko związanego z orderami.
Zapewne Twój Order jest złożony z pól i
@mariecziek: chyba sobie #!$%@? żartujesz, serwis zwraca ci cenę ordera ? XD to order ma zwracać cenę
@mariecziek: właśnie chodzi o to, że nie powinno być różnicy w tym przypadku. Ten kod nie powinien mieć nic wspólnego z frameworkiem którego używasz i tutaj jest największy problem, bo to tak jakbyś przy wbijaniu gwoździa w deskę przybijał też młotek... razem z tym gwoździem... do tej samej deski. To, że masz wątpliwości to normalne, na tym
$order = $orderRepo->findOneBy();
$price = $order->getPrice();
tak poza tym mam rozumieć że Orders to kolekcja zamówień ? w bazie jest to przechowywane jak ? każda kolumna to oddzielne zamówienie ?
poza tym tworzysz
public function addItems()
{
$cart = $this->cart->getCart();
foreach ($cart as $id => $amount) {
$variation = $this->em->getRepository(ProductVariation::class)->find($id);
$this->addOrderItem($this->getOrder(), $variation, $amount);
}
}
Naprawdę ? Pobieranie czegoś w foreachu ? Tak ciężko zrobić:
$ids=[];
$amounts=[];
foreach ($cart as $id => $amount) {
$amounts += [$id => $amount];
$ids[]=$id;
}
$criteria = new Criteria();
$criteria->where($criteria->expr()->in('id',$ids));
$variations=$this->em->getRepository->(ProductVariation::class)->matching($criteria);
I zmienić w metodzie addOrderItem aby łykał tablicę variatons i tablicę amounts ?
poza tym ten
Yii był frameworkiem gdzie stosowano wzorzec MVC, więc takie rzeczy jak te, które piszę w serwisie pisane były w modelu. W sf2 w encji trzymam tylko strukturę DB, ewentualnie jakieś metody do sprawdzania statusu itp. no a SQL'e (querybuilder) pisze w repozytoriach. Widziałem, że niektóre bundle mają folder Model i
public function addOrderItem(Orders $order, ProductVariation $productVariation, $amount)
{
$orderItem = new OrderItem();
$orderItem->setOrder($order);
$orderItem->setPrice($productVariation->getPrice());
$orderItem->setProductVariation($productVariation);
if ($productVariation->getAmount() < $amount) {
$orderItem->setAmount($productVariation->getAmount());
} else {
jeszcze zawołam @DanioPL niech zweryfikuje co ja tu gadam żebym też nie gadał bzdur i ci źle mówił
public function addOrderItem(OrderItem $orderItem)
{
$this->orderItems[] = $orderItem;
}
Jest okej, ale jak ma spieprzony mapping w doctrine to możliwe, że musi zrobić jeszcze $orderItem->setOrder($this); znając życie i robie "pod dokumentację" :D
$orderItem->setOrder($this);
, ale za radą @Jurigag przeniosłem wszystkie metody z serwisu do encji i kontrolera, a wywaliłem cały OrderService :)$orderItem = OrderItemFactory::createFrom($productVariation,$amount);
a potem po prostu:
$order->addOrderItem($orderItem);
$em->persist($order); // o ile nie jest on wcześniej pobrany przez em, jeśli jest to ta linijka jest zbędna
$em->flush(); @DanioPL:
$orderItem = OrderItemFactory::createFrom($productVariation,$amount);
spokojnie wystarczy $orderItem = new OrderItem($productVariation, $amount);
taka fabryka to przerost formy nad treścią imo, bo to prosty obiekt, który zupełnie nie potrzebuje czegoś takiego.
Reszta spoko, a jeśli chodzi o to $orderItem->setOrder($this); to musi to robić, żeby mu doctrine wypełnił pole w OneToMany. Da się to "ominąć" przez użycie dodatkowej tabeli. Dopóki getterki i setterki i tak będą to to nie przeszkadza ;)