Aktywne Wpisy
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)
IntruderXXD +618
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ・ 。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ∴。
⠀⠀⠀・゚*。.
⠀⠀⠀⠀⠀⠀⠀ ・ *゚
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀・ ゚*
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ・。
⠀⠀⠀⠀⠀⠀⠀⠀*・。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ *.。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。・
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ゚*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。。 ・
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。 ・゚
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。*・。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ∴。
⠀⠀⠀・゚*。.
⠀⠀⠀⠀⠀⠀⠀ ・ *゚
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀・ ゚*
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ・。
⠀⠀⠀⠀⠀⠀⠀⠀*・。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ *.。
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。・
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ゚*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。。 ・
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。 ・゚
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。°*.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀。*・。
Aktywne Znaleziska
Zawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
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 ;)