
Pavel
13.12.2016
17:01:24
Сайт с одним свифтмейлером скачивает минут 5, еще синхронизация минут 5. И так каждый раз. Я понимаю конечно, что можно исключить из выдачи vendor и юзать компосер и на сервере и на клиенте, но это неудобно

Sergey
13.12.2016
17:01:56
а зачем с ними работать?

Pavel
13.12.2016
17:02:31
Ну а как? Постоянно делать изменения и лезть в FTP чтоли попутно вспоминая что поменял?

Sergey
13.12.2016
17:02:43
git?)

Google

Pavel
13.12.2016
17:03:24
Я не шарю как деплоить с помощью гита. В пхпшторме же есть такой функционал, и работает он отвратительно

Mihail
13.12.2016
17:03:36
0_o

da horsie
13.12.2016
18:07:00

$iD
13.12.2016
18:18:15
Было бы там в чем шарить. Уделить час чтобы понять пару основных команд и жить в кайф.

Sergey
13.12.2016
19:05:39

Pavel
13.12.2016
19:06:04

Sergey
13.12.2016
19:06:16
лучше настрой rsync
и радуйся
все будет молниеносно
никто не хочет придумать мэппер данных на объекты?
ну или обсудить

Google

da horsie
13.12.2016
19:44:41
мм
продолжай

Sergey
13.12.2016
19:44:53
ну вот сейчас составляю gist
с хотелками и списком имеющихся мэпперов/гидраторов на данный момент
в целом мне нужна штука, которая позволяет мэпить json на объекты
и не только json
а вообще что угодно на что угодно

da horsie
13.12.2016
19:45:38
мне тоже такая штука нужна

Sergey
13.12.2016
19:45:46
в целом я пока делаю так
class UserRequestMappers
{
public function registerUserRequest(Http\Request $request): RegisterUserRequest {
$mapped = new RegisterUserRequest();
$mapped->email = $request->get('email');
$mapped->password = $request->get('password');
$mapped->name = $request->get('name');
return $mapped;
}
public function loginRequest(Http\Request $request): LoginRequest
{
$mapped = new LoginRequest();
}
}
ну это то чем я пользуюсь сейчас
у меня таких классов несколько
и есть штука которая на основе return type выясняет какой мэппер для какого типа
и сама все связывает между собой
но мне не нравится
из всех пока больше всех нравится https://github.com/ScriptFUSION/Mapper
но он сырой и умеет только массив в массив конвертить
гидрировать объекты он не умеет и научить его этому не особо выйдет

da horsie
13.12.2016
19:51:31
есть еще одна связанная задача - валидация запроса перед или в процессе маппинга

Sergey
13.12.2016
19:51:44
да, тоже на этом пока туплю

Google

Sergey
13.12.2016
19:51:48
с одной стороны надо и до и после

da horsie
13.12.2016
19:51:56
я не знаю как правильно
я сделал свой костыль

Sergey
13.12.2016
19:52:00
ну мол если мне прислали json я должен именно его валидировать

da horsie
13.12.2016
19:52:20
у меня есть обертка над сырым json

Sergey
13.12.2016
19:52:20
ибо с точки зрения клиента я должен возвращать ошибки валидации данных привязанных к той структуре, которую мне прислали

da horsie
13.12.2016
19:53:12
которая имеет методы типа дай_мне_инт_по_адресу('foo.bar')
метод возвращает int или плюется ValidationException

Sergey
13.12.2016
19:53:53
ну такое... идеально было бы получить сначала все ошибки а потом плюнуть ValidationException

da horsie
13.12.2016
19:54:01
да
мне оно тоже не нравится
я смотрел в соторону JSON schema

Sergey
13.12.2016
19:54:21
ништяк, мы с тобой одной и той же задачей заняты)

da horsie
13.12.2016
19:54:28
но оно умеет только в валидацию

Sergey
13.12.2016
19:54:35
ну да

da horsie
13.12.2016
19:54:54
и получается, что информация о структуре запроса живет в двух местах одновременное - в валидаторе и в маппере
что явно нарушает information expert
но я хз че делать

Sergey
13.12.2016
19:55:16
у меня еще была безумная идея
разворачивать ошибки валидации на старую структуру

Google

Sergey
13.12.2016
19:55:42
мол имя информацию о мэппинге мы можем произвести обратную операцию
и нам по сути только пути к пропертям подправить надо

da horsie
13.12.2016
19:56:07
не понял

Sergey
13.12.2016
19:56:09
но я на 100% не уверен что у меня есть вся информация для туда-сюда
ну например
я посылаю JSON
{"foo": {"bar": "not int"}}
и хочу замэпить на объект
class Foo
{
public $bar; // int
}

Admin
ERROR: S client not available

Sergey
13.12.2016
19:57:19
я мэплю данные, загоняю объект в валидатор
и он выдает ошибки
path=['bar'], message="not int"
и я могу обратно потом сконвертить пути

da horsie
13.12.2016
19:57:52
в json?

Sergey
13.12.2016
19:57:59
path=['foo.bar'], message=not int

da horsie
13.12.2016
19:58:32
и вернуть это отправителю?

Sergey
13.12.2016
19:58:36
да

da horsie
13.12.2016
19:59:00
ну такое)

Sergey
13.12.2016
19:59:05
кастылек)

Google

Sergey
13.12.2016
19:59:17
но зато все красиво. информация о структуре в мэппере, валидация у валидатора

da horsie
13.12.2016
19:59:21
было пять стандартов, придумали шестой)

Sergey
13.12.2016
19:59:31
ну почему же?
имея мэппер, который можем мне сказать с чего на что мэпить или мэпилось
я могу написать трансформер ошибок
под любой валидатор
что несколько проще чем дублировать правила валидации
ну и можно для популярных пакетов сделать одинаково
в частности мне надо под symfony/validation
но честно - хэзэ

da horsie
13.12.2016
20:01:08
ну
тогда валидировать должна сама модель. ты ей пихаешь неправильные данные - она тебе ValidationException. маппер его ловит и возвращает ответ - при попытке насадить такой-то проперти получил такой-то эксепшн

Sergey
13.12.2016
20:02:44
погоди
у меня мэппинг идет на DTO
я потом этот DTO скармливаю валидатору
тот его валидирует
это может быть и сущность или active record модель если надо
но с DTO проще
вообще давай нагенерим юзкейсы)

da horsie
13.12.2016
20:04:42
гм, с ДТО чето сложно

Sergey
13.12.2016
20:05:06
у меня юзкейс простой. У меня есть некие RequestObject-ы которые простые POPO объекты, содержащие входные данные для сервисов-хэндлеров, реализующих какие-то действия в духе "зарегистрируй чувака"
в них иногда появляются вложенные объекты