Nikolay
Test results may not be as expected because the XML configuration file did not pass validation
Миграцию конфигов ты точно сделал?
Рома
да
Рома
./vendor/bin/phpunit --migrate-configuration
Рома
надо ещё и на базу накатить?
я новичок в симфони
Nikolay
нет... странно что ошибка такая вышла... инициализируй чистый конфиг phpunit
Nikolay
у тея проблема не с симфони
Nikolay
причем он у тебя работает
Nikolay
просто варнинги бросает
Рома
запоролись рецепты?
Рома
ок попробую чистую установку
Nikolay
попробуй временно удалить файл phpunit.xml или как он там
Nikolay
и сделай ./vendor/bin/phpunit --generate-configuration
Рома
удалил вывел список команд
Рома
Рома
до генерации
roman@roman-MaiBook-M:~/tests/fix/proc_apps_symfony$ ./vendor/bin/phpunit
Cannot load Xdebug - it was already loaded
Xdebug: [Log Files] File '/var/log/nginx/xdebug.log' could not be opened.
Xdebug: [Step Debug] Could not connect to debugging client. Tried: 127.0.0.1:9003 (through xdebug.client_host/xdebug.client_port).
PHPUnit 10.5.16 by Sebastian Bergmann and contributors.
Usage:
phpunit [options] <directory|file> ...
Configuration:
--bootstrap <file> A PHP script that is included before the tests run
Рома
о починилось. спасибо
Михаил
Пфф, чтоб в симфе всё само.
Симфа как линукс, в ней можно всё настроить и ты будешь всё настраивать
Рома
вопрос только зачем используют симфони, когда есть удобный ларавел, где нет 10 бандлов и столько же yml файлов
Рома
в симфони есть реализация jobs, расписаний? событий?
Михаил
Михаил
Вообще не понимаю зачем ты симфу выбрал когда есть ларка
Рома
больше иметь охвата в вакансиях и за симфони предлагают больше
Михаил
Што?
Михаил
Я недавно делал быстрый ресёрч, ввкансий на ларке раза в 2 больше
Михаил
А зп равные
Михаил
Друг, не трать время, ларка топ
Рома
сейчас не так, зп от 100 на ларке, в симфони в 2 раза больше
Михаил
Михаил
Ну помоему эти индусоиды-симфонисты переоценены, платят тупо за кол-во строк в кодн
Михаил
Вот оно надо тебе?
Рома
нужны бабки и больший охват по вакансиям
Рома
ну и для собственного развития)
я ещё планирую yii2 охватить
Михаил
И правильно
Ценность сотрудника исчисляется в кол-ве фреймворков которые он познал
Рома
на симфони портируют какое лютое легаси в основном
Nikolay
Рома
да, основной ларавел, но если подвернется вакансия то будет что продемонстрировать
Nikolay
Да ларка огонь!!!
Nikolay
Там такой кайф в магии... Кода почти нет и все раьотает. Мммм
Nikolay
Рома
class StmtFactory
{
use FakerTools;
public function create(?array $data = null): Stmt
{
return (new Stmt())
->setId($data['id'] ?? $this->fake()->randomNumber())
->setName($data['name'] ?? $this->fake()->name)
->setEmail($data['email'] ?? $this->fake()->unique()->safeEmail)
->setMessage($data['message'] ?? $this->fake()->realText())
;
}
}
use Faker\Factory;
use Faker\Generator;
trait FakerTools
{
public function fake(): Generator
{
return Factory::create();
}
}
public function testA(): void
{
$model = (new StmtFactory)->create();
dump($model);
$this->assertEquals(true, true);
}
что-то вышло похожее
Рома
Михаил
Но лучше чтоб твоя фабрика стала билдером и какой-нибдуь флюид интерфейс поддерживала.
А то крутой хак с аргументом $data - но в тестах не айс.
Ну или несколько статичных методов
Михаил
Ну и это Faker\Factory вроде как можно в конструктор к StmtFactorу запихнуть чтоб мазохизмом с трейтами не заниматься
Рома
интересно как лара интегрирует свои хелперы без класса
Рома
чтоб так же написать fake()
Рома
подскажите а такой синтаксис существует, как это сделать в symfony?
#[Route(path: '/api/stmts/{$id}', methods: ['put'])]
Михаил
Знак бакса убери
Михаил
И в контроллере в методе объяви параметр с таким же именем как и параметр в пути
Рома
#[Route(path: '/api/stmts/{id}', methods: ['put'])]
public function update(Request $request, Stmt $id): Response
{
return $this->json($this->service->update($id, $request->toArray()));
}
сработает?
Рома
а в symfony есть классы валидации?
Михаил
Михаил
Рома
а есть может библиотека чтоб загрузить модель автоматически, как в ларе?
Михаил
Рома
Больше не рекомендуется использовать этот пакет в текущих приложениях Symfony. Все аннотации, предоставляемые этим пакетом, теперь встроены в Symfony в качестве атрибутов PHP. Ознакомьтесь с полным списком атрибутов Symfony.
Михаил
Михаил
Михаил
Хуя вода, вот это порнография
Рома
да это symfony)
Михаил
Да хуйня полная
Рома
https://symfony.com/doc/current/doctrine.html#automatically-fetching-objects-entityvalueresolver
Михаил
SensioFrameworkExtraBundle
А ну да, точно.
Я просто начинал с этой версии и мы сиську использовали.
Но потом стало понятно что гегиена пакетов это важно, плюс сделать
#[Route(…)]
pubf getUser(UserRepository $users, string $id) {
$user->getByIdOrThrow($id);
Это по строкам столько-же что и парам конвертеры и еже с ними, к тому же репозиторий всё равно нужен - то взяли и выпилили всю эту шелуху. И тебе советую
Рома
теперь как в ларе
Павел
теперь как в ларе
Когда из лары делают симфу, а из симфы лару, то все катится в гавно)
Рома
#[Route(path: '/api/stmts/{id}', methods: ['put'])]
public function update(Request $request, Stmt $stmt): Response
{
return $this->json(['data' => $this->service->update($stmt, $request->toArray())]);
}
да теперь без лишних анотаций) нативно)
Михаил
Михаил
Рома
а что не так?
Михаил
$request->toArray() вместо уже провалидированного DTO
Рома
я ещё не разобрался как это делать в симфони
Михаил
Ну судя по все так же как и в ларке, всё у вас слизали
Рома
/**
* Обновление из массива.
*/
public function updateFromArray(Stmt $stmt, array $data): Stmt
{
$stmt->setName($data['name'])
->setEmail($data['email'])
->setMessage($data['message'])
->setComment($data['comment'])
->setStatus($data['status'])
->setUpdatedAt(Carbon::now()->toDateTimeImmutable())
;
$this->manager->persist($stmt);
$this->manager->flush();
return $stmt;
}
всё равно здесь не пройдут лишние поля
Михаил
е если у тебя этот роут обновляет Stmt то лучше сделать так
#[Route(path: '/api/stmts/{id}', methods: ['put'])]
public function update(Request $request, Stmt $stmt): Response
{
$this->service->update($stmt, $request->toArray());
return $this->json(['data' => $stmt]);
}
Рома
хотя доктрина это тот ещё гемор, радует только генерация миграций), как в django
Михаил
в php объекты передаются по ссылке, так что тебе не нужно возвращать всё это дело
Михаил
второе - тебе не нужно повторно персистить сущность Stmt, она и так уже в entity map
Михаил
третье, я бы flush делал уже в контроллере, убрал был вообще упоминание из сервиса
Рома
это не аналог save() ?