Size: a a a

Laravel для начинающих

2020 February 07

AH

Andrey Helldar in Laravel для начинающих
Иван Лещенко
Enum должен давать какие-то преимущества над константами
Если они хранятся в базе, то нет. Их поддержка накладывает много ограничений. Я выдернул все enum из проекта на следующий день когда пришлось изменять их...
источник

И

Игорь in Laravel для начинающих
Andrey Helldar
Да уже можно быть лучше - вынести их отдельно, не раздувая код. Вот только некоторые предпочитают срать там же где едят.

Как говорится, чисто не там где убирают, а там где не мусорят.
мне кажется отдельно - с ними непонятно как или неудобно работать. Я ничего не имею против твоего подхода, но и константы тоже имеют место быть. Куда уже лучше, чем везде проверки ставить типа $ticket->status === 'answered'.

Да и в поиске удобно, я тебе выше показал как. Ничего необычного
источник

ИЛ

Иван Лещенко in Laravel для начинающих
Andrey Helldar
Если они хранятся в базе, то нет. Их поддержка накладывает много ограничений. Я выдернул все enum из проекта на следующий день когда пришлось изменять их...
Я как раз говорю, что в пыхе нет никаких причин юзать enum
источник

ИЛ

Иван Лещенко in Laravel для начинающих
Константы работают прекрасно
источник

ИЛ

Иван Лещенко in Laravel для начинающих
И, вероятнее всего, быстрее
источник

AH

Andrey Helldar in Laravel для начинающих
Игорь
мне кажется отдельно - с ними непонятно как или неудобно работать. Я ничего не имею против твоего подхода, но и константы тоже имеют место быть. Куда уже лучше, чем везде проверки ставить типа $ticket->status === 'answered'.

Да и в поиске удобно, я тебе выше показал как. Ничего необычного
Как говорится, нет плохой еды - есть те, кто не умеет ее готовить.

Твой подход не плох, но он раздувает модель. И да, даже 1 лишняя строка для меня является раздуванием. Именно поэтому все проекты от мала до велика свожу к единой архитектуре.
Таким образом точно знаю что все константы всегда лежат в App\Constants что бы ни было под капотом.
источник

AH

Andrey Helldar in Laravel для начинающих
Иван Лещенко
Я как раз говорю, что в пыхе нет никаких причин юзать enum
+
источник

UB

Uladzimir Bahdanovich in Laravel для начинающих
Andrey Helldar
Нет. Они принадлежат двум разным.
Я про дубляж.
Ок. Пусть будет 2 правды. Твоя пусть будет правдивее. Давай закончим. Мне нужно работать:)
источник

AH

Andrey Helldar in Laravel для начинающих
Uladzimir Bahdanovich
Ок. Пусть будет 2 правды. Твоя пусть будет правдивее. Давай закончим. Мне нужно работать:)
Дык тебя никто не держит. Кроме тебя в чате и другие люди есть.

Правда всегда одна - зависит с какой стороны на нее посмотреть.
источник

E

Evgenii in Laravel для начинающих
class Server extends Model
{
   protected $enums = [
       'status'  => ServerStatusEnum::class,
   ];
}

$server->status = ServerStatusEnum::provisioning();

а если так

$server->status = BlaBla::provisioning();

ошибку даст

это как защита от джунов, у тебя константы ты хоть что можешь сохранить в модель а тут строгий тип

setStatusAttribute(ServerStatusEnum $enum) - ВОТ
источник

И

Игорь in Laravel для начинающих
Andrey Helldar
Как говорится, нет плохой еды - есть те, кто не умеет ее готовить.

Твой подход не плох, но он раздувает модель. И да, даже 1 лишняя строка для меня является раздуванием. Именно поэтому все проекты от мала до велика свожу к единой архитектуре.
Таким образом точно знаю что все константы всегда лежат в App\Constants что бы ни было под капотом.
так можно и цвет автомобиля выносить в отдельный класс Color, ведь он будет использоватся и для цвета авто и для цвета садовных тележек и цвета шляпы
источник

И

Игорь in Laravel для начинающих
но по твоей логике использование красного цвета в разных местах - дублирование кода
источник

AH

Andrey Helldar in Laravel для начинающих
Игорь
но по твоей логике использование красного цвета в разных местах - дублирование кода
Нет, по моей логике дублирование, это:
class Car extends Model {
 const RED = 'Красный';
}

class Table extends Model {
 const RED = 'Красный';
}

А вот исключение дублирования - это:
namespace App\Constants;

class Colors {
 const RED = 'Красный';
}

use App\Constants\Colors;
class Car extends Model {
 // Colors::RED
}

use App\Constants\Colors;
class Table extends Model {
 // Colors::RED
}


либо
namespace App\Constants;

interface Colorable {
 const RED = 'Красный';
}

use App\Constants\Colorable;
class Car extends Model implements Colorable {
 // static::RED
}

use App\Constants\Colorable;
class Table extends Model implements Colorable {
 // static::RED
}
источник

AH

Andrey Helldar in Laravel для начинающих
Игорь
так можно и цвет автомобиля выносить в отдельный класс Color, ведь он будет использоватся и для цвета авто и для цвета садовных тележек и цвета шляпы
Об этом я и говорю - вынести все константы в единое место, исключая дубляж.
источник

И

Игорь in Laravel для начинающих
Evgenii
class Server extends Model
{
   protected $enums = [
       'status'  => ServerStatusEnum::class,
   ];
}

$server->status = ServerStatusEnum::provisioning();

а если так

$server->status = BlaBla::provisioning();

ошибку даст

это как защита от джунов, у тебя константы ты хоть что можешь сохранить в модель а тут строгий тип

setStatusAttribute(ServerStatusEnum $enum) - ВОТ
а гле проверка, что статус А может поменятся на статус Б, но не наооброт?
источник

E

Evgenii in Laravel для начинающих
Игорь
а гле проверка, что статус А может поменятся на статус Б, но не наооброт?
это уже стейты
источник

И

Игорь in Laravel для начинающих
то есть, если товар уже доставлен, он не может перейти в статус - ожидает доставки курьером
источник

E

Evgenii in Laravel для начинающих
стейт
источник

E

Evgenii in Laravel для начинающих
protected function registerStates(): void
   {
       $this
           ->addState('state', PaymentState::class)
           ->allowTransition(Pending::class, Paid::class)
           ->allowTransition(Pending::class, Failed::class, PendingToFailed::class);
   }
источник

E

Evgenii in Laravel для начинающих
источник