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

Александр
12.10.2017
15:51:03

Urmat
12.10.2017
15:51:12
ага

Andrew
12.10.2017
15:59:03

Google

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

$iD
12.10.2017
16:00:09
doctrine-тип конечно

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

Sergey
12.10.2017
16:19:19

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

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

Алексей
13.10.2017
13:18:38

Борис
13.10.2017
13:21:10

Vlad
13.10.2017
13:21:50
@skobkin неа, там ошибка валидации формы
@benbor я не хочу) я против этого

Алексей
13.10.2017
13:22:39

Google

Борис
13.10.2017
13:23:16

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

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

Алексей
13.10.2017
13:27:22

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

Алексей
13.10.2017
13:28:28

Dima
13.10.2017
13:28:31

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

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

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

Алексей
13.10.2017
13:36:44

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

Борис
13.10.2017
13:38:57

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

Алексей
13.10.2017
13:40:15

Google

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

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

Алексей
13.10.2017
13:41:03

Борис
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

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

Daniel
13.10.2017
13:48:23

Алексей
13.10.2017
13:48:32

Борис
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
На пхп то)

Алексей
13.10.2017
13:50:10

Artem
13.10.2017
13:50:16

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"