Mam pytanie i problem. Jak dotąd działałem tylko w Laravel ale przyszło mi coś podziałać w Symfony. Jestem cały czas początkujący.
W kontrolerze mam taki kod który odwołuje się do karty koszyka(sylius) gdzie ten fragment (akurat zwraca już konkretne dane z jakiegoś tam produktu)
$this->cartQuery->getOneByToken($request->attributes->get('token'))
ten $this wyrzuca mi api GET takie coś jak poniżej
{
"tokenValue": "SDAOSLEFNWUe43QLI5325",
"channel": "WEB_GB",
"currency": "GBP",
"locale": "en_GB",
"checkoutState": "cart",
"items": [
{
"id": 1,
"quantity": 2,
"total": 1000, <- CHODZI ŻEBY SIĘ DOSTAĆ TUTAJ ;
"product": {
"code": "LOGAN_MUG_CODE",
"name": "Logan Mug",
"slug": "logan-mug",
"averageRating": "4.5",
"taxons": {
"main": "MAIN_TAXON_CODE",
"others": [
"OTHER_TAXON_CODE"
]
},
"variants": {
"additionalProp1": [ .... I tak dalej... ;)
I tutaj moje pytanko mam kontroler który oczywiście nie działa poprawnie. Prosiłbym podpowiedź albo napisanie zebym zobaczył jak to robić. Chodzi o to żeby dopisać logikę do tego kontrolera.
1. Trzeba dostać się do tego "total" z tego JSONa. I jeśli wartość będzie 200 to wysyłka ma być darmowa. A jeśli mniej niż 200 to płatna. Po prostu bedzie wysyłane to do api na froncie.
W .env ustawiłem sobie stałą wartość 200. Chce ją wywołać w tym kontrolerze i zrobić logikę przy porównaniu. Tego $this który mi zwraca api wrzuciłem sobie do zmiennej i próbowałem wyjąć total a potem If-ami zrobić sobie porówanie do stałej z .env ale chyba coś jest całkiem nie halo i kompletnie nie tak to sie robi? ;) Chodzi mi o linie która dopisałem w view.
** 2. Drugie pytanko zwrócie uwage na konstruktor zrobiłem sobie tam 2 dodatkowe zmienne $logisticPriceMinimum i $shippingPriceItem Nie wiem czy w dobry sposob je resjestruje. Te dwie wczesniejsze odwołuja się do jakiś interfejsów ale nie wiem czy te moje które sobie zrobiłem też muszą (chyba niekoniecznie?)**
Kontroler:
<?php
namespace App\Controller\Cart;
use FOS\RestBundle\View\View;
use FOS\RestBundle\View\ViewHandlerInterface;
use Sylius\ShopApiPlugin\ViewRepository\Cart\CartViewRepositoryInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class SummarizeAction
{
/** @var CartViewRepositoryInterface */
private $cartQuery;
/** @var ViewHandlerInterface */
private $viewHandler;
/** @var ViewHandlerInterface */
private $logisticPriceMinimum;
/** @var ViewHandlerInterface */
private $shippingPriceItem;
public function __construct(
CartViewRepositoryInterface $cartQuery,
ViewHandlerInterface $viewHandler,
ViewHandlerInterface $logisticPriceMinimum, <--- czy ja sobie dobrze rejestruje te zmienne?
ViewHandlerInterface $shippingPriceItem
)
{
$this->cartQuery = $cartQuery;
$this->viewHandler = $viewHandler;
$this->logisticPriceMinimum = $logisticPriceMinimum;
$this->shippingPriceItem = $shippingPriceItem;
}
public function __invoke(Request $request): Response
{
try {
return $this->viewHandler->handle(
View::create(
$logisticPriceMinimum = $this->cartQuery->getOneByToken($request->attributes->get('token')), <-- od tego momentu sobie dopisałem tą logikę co tu jest nie tak ?
Response::HTTP_OK),
$arr = json_decode($logisticPriceMinimum);
$info = $arr->items[0]->total;
$shippingPriceItem = $this->getParameter('app.shippingPriceItem'); <-- tu się odwołuje się do stałej którą sobie w .env ustawiłem na 200 kombinuje dalej jak to przyrównać
if ($info > $shippingPriceItem ){
return $freeShipping;
} elseif
($info <= $shippingPriceItem){
return $payForShipping;
}
);
} catch (\InvalidArgumentException $exception) {
throw new NotFoundHttpException($exception->getMessage());
}
}
}