@symfony_php

Страница 818 из 1418
Alan
04.04.2018
20:34:40
имхо для паблик образа норм, а когда часто собирать приватное надо то не удобен

но его настроить две минуты так что попробуй

Bohdan
04.04.2018
20:36:36
а собрать локально и запушить? или оно не так работает?

заранее сорри за возможно туповатые вопросы, ребят

Google
Sergey
04.04.2018
21:00:02
но лучше на CI собирать

Bohdan
04.04.2018
21:00:20
ну это само собой оптимальный вариант

Sergei
05.04.2018
07:15:28
Привет, мне нужно создать в buildForm поле с атрибутом name в виде массива (типа $form->getData() => ['age' => ['lte' => 10, 'gte' => 20]] ) ->add('age[lte]', IntegerType::class, [ 'label' => 'Age to', 'constraints' => [ new NotBlank(), new GreaterThan(0), ], ]) передаю age[lte] но первый параметр метода add() не может содержать символы [], как это можно сделать?

Icewild
05.04.2018
07:16:54
age.lte?

Sergei
05.04.2018
07:17:53
The name "age.gte" contains illegal characters. Names should start with a letter, digit or underscore and only contain letters, digits, numbers, underscores ("_"), hyphens ("-") and colons (":").

любые намеки что age - это масив symfony не устраивает

Pavel
05.04.2018
07:30:02
@fes0r слушай, а как в твоем бандле сделать что-то типо наллбл поля, чтобы если поля нет то его и не будут проверять?

Andrew
05.04.2018
07:30:30
любые намеки что age - это масив symfony не устраивает
Возможно, это намек на то что массив по другому описывается?

Sergei
05.04.2018
07:32:13
спс понял

Andrew
05.04.2018
07:39:39
спс понял
Если мапишь на структуру данных, проще всего заюзать property path

Shmaltorhbooks
05.04.2018
07:41:43
описываешь плоскую структуру формы, а у полей пишешь property_path => age.lte property_path => age.gte

Sergei
05.04.2018
07:42:38
сенк)

Google
Bohdan
05.04.2018
08:07:48
не за что)

Pavel
05.04.2018
08:13:14
читай доку по symfony/validation. там есть Optional
А понял, можно несколько ассертов в массиве обьеденять

Max
05.04.2018
08:21:42
а кто у себя на проекте делает "глоссарий" ошибок которые отдаются АПИ-шкой, тип такого: https://www.twilio.com/docs/api/errors/debugging#debugging-calls-to-the-rest-api https://www.twilio.com/docs/api/errors где, на каждую ошибку - свой уникальный код, а http коды - обозначают чисто группу? вопрос как вы это делали? просто список где-то в конфиге? или же код прописан в самих исключениях? как это в доку добавляется и тп?

Max
05.04.2018
08:34:20
> берешь и добавляешь в доку) кэп) меня больше интересует как это хранить и как лучше это менеджить, проще всего массив и не париться, но если делать через интерфейс придется еще добавлять всякие велосипеды чтобы проверять уникальность, выводить все и тп

Konstantin
05.04.2018
08:36:47
тебя проклянут за такое

никому не интересно поддерживать целую энциклопедию ошибок

делай проще )

Max
05.04.2018
08:39:36
тебя проклянут за такое
того и спрашиваю)

Bohdan
05.04.2018
08:44:26
@fes0r я опять про докер у тебя база каждый раз поднимается из фикстур? али как?

Sergey
05.04.2018
08:44:41
да, из фикстур

локально если

Bohdan
05.04.2018
08:44:47
я вижу, что она добавляется только для дев и для тестового

Sergey
05.04.2018
08:44:52
но ты всегда можешь сделать снэпшет базы и восстановить

Bohdan
05.04.2018
08:44:57
ну и для тестового в tmpfs

у меня где-то валяется пример с другого проекта с volume для mysql

Boris
05.04.2018
08:52:27
Привет всем, чот туплю, подскажите я же могу используя symfony/serializer из json в сущность загнать поле ArrayCollection?

Так что-бы из массива сразу залетели в ArrayCollection именно сущности.

Google
Vladislav
05.04.2018
08:54:15
а ты попробовал?

попробуй и увидишь)

Boris
05.04.2018
08:54:42
Пробовал, не получается :)

Но может я что-то не так делал

Vladislav
05.04.2018
08:54:55
что пишет?

а стой, ты обратно хочешь. я не так прочитал.

Boris
05.04.2018
08:58:01
Да, десериализацию хочу, а не сериализацию :)

Залетает вот такое поле: "comments": [ { "text": "Duis aute irure dolor in reprehenderit", "creatorId": 3, "createdAt": "2018-08-03 12:05:40" }, { "text": "Lorem ipsum dolor sit amet", "creatorId": 5, "createdAt": "2013-12-08 14:08:10" } ] В сериализаторе есть ArrayDenormalizer. В сущности есть такие методы: /** * @return Collection|Comment[] */ public function getComments(): Collection { return $this->comments; } public function addComment(Comment $comment): void { if ($this->comments->contains($comment)) { return; } $this->comments[] = $comment; $comment->setComplaint($this); } Я думаю сделать setComments который будет принимат массив, циклом пробегать и делать сущности. Но звучит это как-то не очень.

Konstantin
05.04.2018
09:02:19
того и спрашиваю)
есть идея ващет но надо проверить

Slava
05.04.2018
09:05:11
я заливаю фикстуры 1 раз в bootstrap тестов , задем делаю mysqldump и этот дамп уже в setUp в родительском классе через конкольную утилиту mysql заливаю.

Slava
05.04.2018
09:06:36
paratest ктото использует для распараллеливания phpunit тестов?

Konstantin
05.04.2018
09:09:51
нука
ща до компа доберусь накидаю

Slava
05.04.2018
09:10:55
я тоже использую) могу поделиться опытом распараллеливания тестовых баз данных для функциональных тестов, если кому интересно

Slava
05.04.2018
09:15:17
сейчас чайку попью и напишу

юнит тесты бытро выполняются, а вот функциональные должно

когда начал копать в сторону как распараллелить, то наткнулся на paratest

Shmaltorhbooks
05.04.2018
09:28:09
юниты - да, 3% времени выполняются от всех тестов

Google
Slava
05.04.2018
09:28:31
вся сложность - это сделать так, чтобы каждый тест работал со своей копией тестовой БД

в config_test.yml вот такие настройки

https://pastebin.com/TamtKYaZ

объявили сервис, который будет динамически из пула тестовых БД подставлять нужную динамически:

dbname: "@=service('database_pool').get()"

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

каждый вызов сервиса doctrine.dbal.default_connection будет обращаться ко своей БД

https://pastebin.com/DpRQxC3W - не самый красивый код, но работает

Pavel
05.04.2018
09:32:42
dbname: "@=service('database_pool').get()"
а что за @=service('database_pool').get()

это ExpressionLanguage Component?

Slava
05.04.2018
09:34:50
не могу сказать, натолкнулся в инете года 2 назад

и оно заработало!

DatabasePool - заливает фикстуры, дампит БД в файл, создает нужное количество тестовых БД.

Pavel
05.04.2018
09:35:45
Пиздато

Shmaltorhbooks
05.04.2018
09:36:27
это ExpressionLanguage Component?
https://symfony.com/doc/3.1/service_container/expression_language.html

таки да, expression language

Pavel
05.04.2018
09:37:07
о дивиный мир symfony

Slava
05.04.2018
09:37:20
https://pastebin.com/XTxvaJpy - это базовый класс для всех функциональных тестов

в setUp для каждого теста будет подготовлена одна из свежих тестовых БД

Shmaltorhbooks
05.04.2018
09:38:48
а какой прирост от распалеливания, например, на два потока?

Google
Shmaltorhbooks
05.04.2018
09:38:56
подозвеваю, что не ровно в два раза

Konstantin
05.04.2018
09:39:26
Slava
05.04.2018
09:39:29
https://pastebin.com/7a108ARM

Slava
05.04.2018
09:39:53
и последний компонент это консольная команда для подготовки всего этого

Konstantin
05.04.2018
09:40:09
нука
дешево сердито. зато иде подсвечивает текст ошибки по ctrl )

Slava
05.04.2018
09:40:44
а чому не поднимать их в beforeClassUp?
каждый метод должен быть изолирован, в случае beforeClassUp - тестовые методы внутри класса не будут изолированы между собой

а какой прирост от распалеливания, например, на два потока?
точно не помно, но в любом случае есть оверхед небольшой

в этоге я себе такой alias добавил:

Shmaltorhbooks
05.04.2018
09:41:53
то есть своя база будет подсовываться для каждого метода test*()?

Slava
05.04.2018
09:41:54
alias paratest='php bin/console test:init:database:pool -e=test 10 && vendor/bin/paratest -f -p 10 —max-batch-size 5 —coverage-html=build/coverage'

да

Shmaltorhbooks
05.04.2018
09:42:34
при таком раскладе @depends тесты скорее всего будут фэйлиться?

Slava
05.04.2018
09:42:53
тесты должы быть изолированы

Slava
05.04.2018
09:43:14
@depends имхо от лукавого

в любом случае в тестах прирост в 5-7 раз по времени я получил функциональных и остался доволен)

Pavel
05.04.2018
09:44:45
каждый метод должен быть изолирован, в случае beforeClassUp - тестовые методы внутри класса не будут изолированы между собой
а у меня не изолированы( Я чисто поток делаю [ тестирую создание -> изменение этой же сущности -> удаление]

Slava
05.04.2018
09:45:28
во всех книгах по тестированию, что я читал пишут, что тесты должны быть изолированы

здесь ты можешь сайдэффекты ловить

+ты не можешь из запустить изолировано (к примеру проверить только удаление)

Страница 818 из 1418