169 похожих чатов

Такое можно в сервисы? Не, вроде ничего криминального, но

я думал, что в сервисы просто выносится какая-то логика в виде методов, чтобы не загрязнять контроллеры. А тут целый класс со своим конструктором и полями, который, вообще является самостоятельной единицей логической, а не просто набором методов, которым контроллер делегирует выполнение задач.

<?php

namespace App\Cart;

use App\Models\Book;

class Cart
{
private $oldCart;

public function __construct(
public $total = 0,
public $items = [],
)
{
$this->oldCart = session()->get('cart');

if ($this->oldCart instanceof Cart){
$this->total = $this->oldCart->total;
$this->items = $this->oldCart->items;
unset($this->oldCart); // Чтобы не копились вложенности
}
}

public function AddToCart(int $id)
{
$book = Book::findOrFail($id);

if (isset($this->items[$id])) {
$this->items[$id]['quantity']++;
} else {
$this->items[$id] = [
'id' => $id,
'name'=> $book->name,
'quantity' => 1,
'price' => $book->price,
'path' => $book->path,
];
}
$this->recountTotal();
}

public function updateItemQuantity($id, $quantity){
if (isset($this->items[$id])) {
$this->items[$id]['quantity'] = $quantity;
}
$this->recountTotal();
}

public function removeItem($id){
if (isset($this->items[$id])) {
unset($this->items[$id]);
}
$this->recountTotal();
}


public function recountTotal(): void
{
$this->total = 0;
foreach ($this->items as $item){
$this->total += $item['quantity']*$item['price'];
}
}

}

7 ответов

14 просмотров

Egor (@PAPRIKA_1994), мы обнаружили что Ваше сообщение больше чем наполовину состоит из кода. Рекомендуем сохранять примеры кода на внешних источниках, например, https://paste.laravel.io

разве это будет работать? ```

public function AddToCart(int $id) почему метод с большой буквы, почему нет типизации аргумента

PSYTRGLES
public function AddToCart(int $id) почему метод с ...

потому что метод позиционирует себя как клас

findOrFail - ну такое себе, у тебя сервис по хорошему должен сам обработать такую ситуацию, что нет книги, иначе тебе 404ую кинет лара.

$this->oldCart = session()->get('cart'); это вообще забей. используй БД для хранения корзины.

PSYTRGLES
public function AddToCart(int $id) почему метод с ...

у меня флешбеки. У нас phpcs в пайплане проверяет код, но он срабатывает только на измененные файлы. Правишь одну строчку в старом коде - все, линтер сходит с ума

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
9
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта