Nikolay
То array ещё менее структурирован, parse более
Рома
емае через рефлексию можно менять защищенные поля
а я думаю зачем это так часто спрашивают в вакансиях на симфони
Nikolay
Менять? А разве не читать?
Павел
Рома
Павел
Риски я назвал, вы профит нет
Nikolay
Nikolay
Профит? Удобство же. Если вам удобно например создать User из DTO, то почему нет? Вызывать какие нибудь события из диспетчера гулпо да
Nikolay
Но если это dto используется ну Реал но только для этих целей. Вот как в симфонии CreateUserDto. Лоьавляю в него Parse и в контроллере у меня готовый валидный объект
Nikolay
Мне эта и идея понравилась из симфоневского дто. Он приходит валидным по параметрам, а по ним я заодно моздаю новый валидный объект юзера
Михаил
Рома
для тестов вместо setId
Михаил
Ну тогда есть короче запись
(fn ($id) => $this->id = $id)->call($entity, 1234);
Павел
Юра
Юра
Прям джс какой-то
Рома
Михаил
И врядли у тебя id будет называться не id
Рома
оставлю через рефлексию, полезный пример
Павел
Павел
Рома
<?php
class StmtFactory
{
use FakerTools;
use EntityTools;
/**
* @throws \ReflectionException
*/
public function create(?array $data = null): Stmt
{
$id = $data['id'] ?? $this->fake()->randomNumber();
$stmt = (new Stmt())
->setName($data['name'] ?? $this->fake()->name)
->setEmail($data['email'] ?? $this->fake()->unique()->safeEmail)
->setMessage($data['message'] ?? $this->fake()->realText())
;
$this->setEntityProperty($stmt, $id, 'id');
return $stmt;
}
}
namespace App\Traits;
/**
* Трейт для работы с сущностью.
*/
trait EntityTools
{
/**
* Обновить защищенное свойство.
*
* @throws \ReflectionException
*/
public function setEntityProperty(object $entity, int|string|array $value, string $field): void
{
$class = new \ReflectionClass($entity);
$property = $class->getProperty($field);
$property->setValue($entity, $value);
}
}
найс
Михаил
Рома
и вся логика сетеров и гетеров идет в одно место)
Павел
Михаил
Ну технически тесты это часть инфраструктуры - так что можешь метод для проставления id запихнуть прям в сущность
Михаил
типо Stmt::setIdForTest()
и под интерфейс
Рома
да если предположить, что я буду делать фикстуры это помешает
Михаил
Можешь ещё через денормалайзер это сделать
Михаил
Ещё в симфе есть propertyAccesser
Павел
Павел
Если хочется магии и автоматики
Павел
Но правда это уже будет зависомость из ядра и его запуск что уже не ок, если юнит тесты
Михаил
Ну а вообще вот нормальный пакет
Михаил
https://github.com/nelmio/alice
Михаил
Чисто ямл конфиг заполнил и всё
Михаил
без ебли
Михаил
Михаил
И фейкер встроен и денормалайзер и методы можно колить
Михаил
И если чо, то можно через php сконфигурировать
Рома
потом когда силами symfony сделаю, перепишу на магию может
Nikolay
Nikolay
Подобные фикстуры на yii2 только
Михаил
ох, юии
Михаил
массив в массиве и в массиве
а также синглтон
Nikolay
Если бы не юии2, я может быть и не стал бы программистом:)
Nikolay
(до сих пор не стал)
Михаил
Рома
ещё и каждый метод постфикс Action имена методов это названия маршрутов)
Михаил
хотя я начинал с Codeigniter
Михаил
смесь симфы с ларой
Рома
разве он продолжает развиваться?
Nikolay
конечно никто не будет на нем кодить. Пионеров мало
Рома
это же лютое легаси в рф сегменте
Михаил
Nikolay
yii2 был прекрасен своим Ar и всякими Active Приставками. Сейчас будет просто куча бойлерплейта. Фабрики, Ханделры, Эмиттеры, Фабрика для фабрики, мидлвари ух
Рома
сомневаюсь что 3 версия когда нибуть выйдет фрейморк 2012 года)
Рома
а и установка его как у какого-то битрикса помоему
Nikolay
там от yii только название
Nikolay
там уже куча готовых модулей
Рома
но вакании встречаются так что надо освоить и платят больше
Nikolay
лучше программирование концептуальное изучай, чем фреймворк
Михаил
Nikolay
ааа сорри
Рома
я знаю много языков и концептуально понимаю)
Nikolay
да да... Толкьо фреймворки, чем большетем лучше
Михаил
Понятийная база нафиг никому не нужна
Nikolay
в Резюмешку все слвоа что знаешь:)
Nikolay
Прям много? Прям отлично знаешь? А может и компьютер саенс знаешь7
Nikolay
Искусство программирования ДЕйстры тоже Осилил. Таненбаума? Маконнела?
Рома
Nikolay
эх...
Рома
я програмирую сайты), а не ядро операционной системы)
скорее даже работу между базой и сервером
Nikolay
Я приверженец системного/инженерного мышления и междисциплинарного развития. Даже сайты может писать инженер
Nikolay
НУ и продолжишь их писать значит:)