@symfony_php

Страница 331 из 1418
Valentin
12.10.2017
15:49:05
В доктрину-то карбон не надо, наверное Достаточно в твиг-шаблонах хелпер Ну или если апи, то у сущности можно геттер с пропуском через diffForHumans()

Александр
12.10.2017
15:51:03
Здарова комрады. Здесь есть 3 разрабы, у которых есть опыт работы с Amadeus?
Это хрень для бронирования авиабилетов? Или другое :)

Urmat
12.10.2017
15:51:12
ага

Andrew
12.10.2017
15:59:03
В доктрину-то карбон не надо, наверное Достаточно в твиг-шаблонах хелпер Ну или если апи, то у сущности можно геттер с пропуском через diffForHumans()
почему? в случае доктрины оверхед минимальный, а в примере с апи сущность ничего не должна знать о форматах (первый пример - отображение в разных форматах и на разных языках), в таком случае должен быть отдельный форматтер\принтер

Google
Sergey
12.10.2017
15:59:40
ты беспокоишься по поводу того что это привязка к сторонним решениям?

$iD
12.10.2017
16:00:09
какая разница делать new DateTime или new Carbon?
никакой... впили свой тип и делай что хочешь

doctrine-тип конечно

Valentin
12.10.2017
16:14:49
ты беспокоишься по поводу того что это привязка к сторонним решениям?
Мне просто кажется, что diffForHumans это какая-то ситуативная вещь, не более чем представление данных. И это проблема шаблона (не важно, Twig или там какого-то JS-фреймворка в случае SPA) представить полученную дату в виде "3 часа назад" с учётом языка и таймзоны. Я бы в API вообще отдавал только в формате ISO8601

Dinar
13.10.2017
05:54:42
Карбон же екстендит DateTime. Даже код нигде менять не придётся.

Vlad
13.10.2017
13:16:50
Ребятули, можно ли както “по умному” отловить ошибку при валидации UniqueEntity (email) и сменить 400ый код респонса на 409? фосрест, симфони формы

Борис
13.10.2017
13:21:10
Ребятули, можно ли както “по умному” отловить ошибку при валидации UniqueEntity (email) и сменить 400ый код респонса на 409? фосрест, симфони формы
Ты хочешь именно одну ошибку валидации повесить на 409 а все остальные ошибки валидации на 400? Тебе не кажется это хреновой идеей? Я так понимаю, связанно это с тем, что на клиенте тебе нужна дополнительная логика, и ты хочешь проверить статус if 409 doSmthingWithEmail ? Ответь на вопрос: А что будешь делать, когда у тебя закончаться все 90+ свободных четырехсотых статусов? Поправь меня если я что-то не так понял

Vlad
13.10.2017
13:21:50
@skobkin неа, там ошибка валидации формы

@benbor я не хочу) я против этого

Алексей
13.10.2017
13:22:39
@skobkin неа, там ошибка валидации формы
Ну допустим. А проблема-то на каком этапе возникает?

Google
Борис
13.10.2017
13:23:16
@benbor я не хочу) я против этого
Тогда зачем задаешь такой вопрос? Не, я серьезно не могу понять твою проблему. Вижу вопрос, но не вижу какую проблему ты решаешь.

Vlad
13.10.2017
13:24:23
@skobkin { "code": 400, "message": "Validation Failed", "errors": { "children": { "firstname": [], "lastname": [], "email": { "errors": [ "This value is already used." ] }, "plainPassword": { "children": { "first": [], "second": [] } } } } }

@skobkin предлагаешь втупую проверять массив на наличие этой ошибки?

Алексей
13.10.2017
13:25:32
@skobkin предлагаешь втупую проверять массив на наличие этой ошибки?
Нет, не предлагаю. Ты же выдаёшь этот JSON в ответ. Почему бы не проверить ДО того как выдал?

Vlad
13.10.2017
13:25:39
@benbor да это одна девушка спрашивает, которой тут нима. я подумал, что тут мозги есть, которые подскажут адекватное решение

@skobkin вот, по этому я и спрашиваю каким адекватным образом это можно сделать

Алексей
13.10.2017
13:27:22
@skobkin вот, по этому я и спрашиваю каким адекватным образом это можно сделать
Ну кода тут никто не видел, вроде. Можно предложить if, но это тебе вряд ли поможет.

nemesis
13.10.2017
13:27:37
Ребята, подскажите по доктриновским миграциям, плз. По умолчанию в таблицу выполненных миграций пишется только версия. Номер итерации не известен. Что делать, если было выполнено 3 итерации (например сливали 3 ветки, и во всех было по несколько миграций) и одну из них надо откатить? Есть способ просто сказать, откати одну итерацию, а доктрина сама разберется какие миграции попали в итерацию? Может пакет какой нибудь есть... Типа как в ларавеле

nemesis
13.10.2017
13:28:49
комит не важен, это я для примера

Vlad
13.10.2017
13:29:01
Алексей if (!$request->request->has('registrationForm')) { throw new InvalidFormNameException('`registrationForm` form name allowed!'); } $user = $userManager->createUser(); $form = $formFactory->createNamed('registrationForm', RegistrationType::class, $user); $form->handleRequest($request); if ($form->isValid()) { $user->setEnabled(false); $user->setConfirmationToken($tokenGenerator->generateToken()); $event = new FormEvent($form, $request); $eventDispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event); $userManager->updateUser($user); $mailer->sendConfirmationEmailMessage($user); return $this->view(['needConfirmation' => true], Response::HTTP_CREATED); } return $this->view($form);

Алексей
13.10.2017
13:29:44
if ($form->isValid()) { // ... } else { // ... ??? }

Vlad
13.10.2017
13:30:09
@skobkin нет, нужно отловить только UniqueEntity для email

и только в этом случае 409

Алексей
13.10.2017
13:30:34
@skobkin нет, нужно отловить только UniqueEntity для email
Ну, то есть, при нём у тебя true === $form->isValid()?

Vlad
13.10.2017
13:31:09
нет

но она будет не валид и в куче других случаев

nemesis
13.10.2017
13:31:24
если пришло 10 миграций, были выполнены первые 5 потом еще 2 потом еще 3, можно как то сказать откати последние 3 (не думая о версиях. Просто сказать migrations:rollback а он сам понял что последний раз накатывались 3)

Vlad
13.10.2017
13:31:33
например емеил короче 3ех символов

Google
Vlad
13.10.2017
13:31:35
или сколько там

Алексей
13.10.2017
13:31:40
но она будет не валид и в куче других случаев
Ну и? Тебе никто не мешает сделать ещё один if().

Vlad
13.10.2017
13:31:51
ясно)

Алексей
13.10.2017
13:32:18
Ты же можешь из $form дёрнуть конкретное поле и его на ошибки проверить.

Хотя в целом ты что-то странное делаешь, кажется.

Vlad
13.10.2017
13:32:42
та это все понятно

я спрашивал про красивые методы решения проблемы

таких методов я сам 3 штуки придумал

Алексей
13.10.2017
13:33:25
Можно это решить, например, на уровне CI. Хотя, наверное, кто-то какое-то дополнение для DoctrineMigrations тоже делал.

nemesis
13.10.2017
13:35:00
может бандлы какие то есть, которые расширяют миграции?

Vlad
13.10.2017
13:35:07
еще можно сделать какойто класс, в котором булевая переменная. валидацию сменить на експрешен пхп, в ней вызвать уникве ентити и потом выкинуть 409 в зависимости от этой переменной

Vlad
13.10.2017
13:35:10
найс решение, да?)

nemesis
13.10.2017
13:36:13
Можно это решить, например, на уровне CI. Хотя, наверное, кто-то какое-то дополнение для DoctrineMigrations тоже делал.
можно и свою команду написать, которая будет добавлять номер итерации, но хочу поискать сначала готовое (наверняка же кому то это нужно было еще)

Vlad
13.10.2017
13:38:22
угу, по кривости также, как и через if

Vlad
13.10.2017
13:39:49
@benbor да я не ебу) мне в данной ситуации интересует только элегантное решение

Алексей
13.10.2017
13:40:15
угу, по кривости также, как и через if
По крайней мере, if - очевидно и читаемо. За логикой уследить проще. А какие-то отдельные классы с булёвыми свойствами - это страннота.

Google
Vlad
13.10.2017
13:40:16
ну скорее всего для того, что бы на фронте отобразить окошечко другое для конкретно этой ошибки

Борис
13.10.2017
13:40:58
блять :) так нету элегантного решения, когда проблемы не поставлена элегантно. То что ты просишь какая-то дичь. Если говорить "409 при ошибке емейла это БИЗНЕСС ТРЕБОВАНИЕ" тогда if будет очень даже элегантно.

Алексей
13.10.2017
13:41:03
@benbor да я не ебу) мне в данной ситуации интересует только элегантное решение
Это плохо. Нужно решая задачу смотреть на цель, которую нужно достичь в итоге. Потому что иначе могут ставиться абсолютно ненужные задачи.

Борис
13.10.2017
13:41:33
Но скорее всего девушке стоит объяснить что менять статус на одну ошибку это пиздец хуевая идея, и тогда будет ЭЛЕГАНТНОЕ решение

Valentin
13.10.2017
13:41:40
В крайнем случае можно не валидировать это в форме А просто сделать ` try { $this->em->flush(); } catch (UniqueConstraintViolationException $exception) ` Но вообще-то это не юзкейс для кода 409, если что

Admin
ERROR: S client not available

Борис
13.10.2017
13:42:18
ps как вообще в программировании можно применять слово "Элегантно" что это такое.... это не технический термин !!!

Daniel
13.10.2017
13:45:34
Ребята, кто нибудь для тестов использовал SQLite in memory mode database schema?

Это вообще законно?

Valentin
13.10.2017
13:47:49
Это вообще законно?
Абсолютно, но поскольку люди иногда пользуются специфичными для конкретной БД фичами (взять тот же postgis), это не всегда можно сделать

Алексей
13.10.2017
13:47:55
Ребята, кто нибудь для тестов использовал SQLite in memory mode database schema?
Типа у тебя в проде одна СУБД, а в тестах ты используешь вместо неё SQLite?

Vlad
13.10.2017
13:48:12
@benbor окей, учту)

Daniel
13.10.2017
13:48:23
Алексей
13.10.2017
13:48:32
Абсолютно, но поскольку люди иногда пользуются специфичными для конкретной БД фичами (взять тот же postgis), это не всегда можно сделать
Я бы даже сказал, что этого не стоит делать, т.к. даже при полностью совместимых запросах поведение может разниться и тесты немного теряют актуальность.

В проекте нету ни строки кода на чистом SQL
Тем более. Не вижу смысла использовать SQLite, если у тебя уже завязка на другую СУБД.

Борис
13.10.2017
13:49:27
Daniel
13.10.2017
13:49:33
Почему завязка? Как раз заявязки нет - все чисто QueryBuilder разруливает

Так-то стремно конечно

Valentin
13.10.2017
13:49:43
Да я бы тоже для интеграционных тестов использовал реальную базу (и с конфигом максимально близким к продакшну), но если там одноклеточный CRUD, то проканает

Daniel
13.10.2017
13:49:58
Просто очень интересно стало, зачем тогда ещё этот in_memory

Google
Daniel
13.10.2017
13:50:04
На пхп то)

Artem
13.10.2017
13:50:16
Ребята, кто нибудь для тестов использовал SQLite in memory mode database schema?
мы используем. большой проект. есть базо-зависимые запросы и их можно либо мокать, либо писать две версии процессинга (узнать у доктрины драйвер)

Daniel
13.10.2017
13:53:16
А то на проекте маразм: на каждый тест загружаются необходимые фикстуры, т.е. каждый раз транкейтится бд

Artem
13.10.2017
13:54:03
+ проще сделать параллельное тестирование (в несколько процессов)

Daniel
13.10.2017
13:54:47
У нас тут тоже накосячили) На каждую ветку и коммит собирается свой билд и поднимает контейнер.

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

Там еще docker

Тоже свои вопросы, хз короче

Есть какой-то fastest

И он все ядра жрал

Но проще кнеш поправить параллельное тестирование)

Valentin
13.10.2017
14:11:55
fastest это просто параллельное выполнение юнит-тестов, вроде. Пользовался им один раз, не понравилось что-то, что – не помню

Ну точнее не "юнит тестов", а "тестов на phpunit"

ps как вообще в программировании можно применять слово "Элегантно" что это такое.... это не технический термин !!!
А вот тут я бы возразил, кстати. Очень даже хорошо оно порой описывает ситуацию



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