Artemiy
20.09.2017
13:23:31
Или надо:
$userService->createAdmin('name', 'email');
этот код в контроллере
Виталий
20.09.2017
13:24:23
с моделькой покрасивше
Artemiy
20.09.2017
13:24:40
Да, но пугает немного создание в контроллере ентити (
Google
Виталий
20.09.2017
13:24:55
и с порядком полей не ошибёшься
А что в этом такого? В базу из контроллера ты не лезешь и даже доктрину не дёргаешь
Artemiy
20.09.2017
13:27:41
хм.. Возможно я усложняю что-то.
Ну допустим так. Но тогда еще встречный вопрос, если я создаю таким образом энтити - логично ли валидацию модели делать в сервисе? Делаю через ValidatorInterface
Хотелось как можно больше разгрузить контроллер
Alexandr
20.09.2017
13:58:32
А почему вы вообще в контроллере не имеете объект? Я про форму, она отдаёт же объект. Т.е. в контоллере надо получить объект, тем или иным способом. Валидатор лучше вынести, чем тоньше класс , тем лучше, как по мне. Принцип единственной ответственности и все такое.
ol
20.09.2017
14:05:27
в контроллере должен быть объект иначе как записывать
а валидацию можно отдельно вынести
$form->isValid
Евгений
20.09.2017
14:07:54
Artemiy
20.09.2017
14:10:50
Alexandr
20.09.2017
14:12:07
Нене, валидатор в общем смысле я имел ввиду
С телефона много не напишешь
Artemiy
20.09.2017
14:16:22
Не совем понял про валидатор
Google
Alexandr
20.09.2017
14:27:36
Все что связано с валидатор интерфейс в отдельный класс, я про это говорил
Artemiy
20.09.2017
14:28:51
Хм, ну у меня перед каждоый записью в базу вызывается:
$errors = $this->validator->validate($entity);
это в сервисе
так норм? я к тому что это не в контроллере, а в сервисе
Alexandr
20.09.2017
14:33:05
Я бы поднял вызов в контроллер
А в сервис пихнул бы валидную модель
Artemiy
20.09.2017
14:34:32
Получается валидация формы и валидация энтити
Alexandr
20.09.2017
14:36:49
Ну грубо говоря да. Вообще, я не делал сложные валидации с формами, но по хорошему бы через аннотация сделать валидацию
Artemiy
20.09.2017
14:37:03
и форму исключить..
У меня так сейчас и работает
Alexandr
20.09.2017
14:38:31
Artemiy
20.09.2017
14:38:48
рест апи
т.е. по сути форма и не нужна (если валидация в модели)
Alexandr
20.09.2017
14:40:44
рест апи
Аа, да, для апи я делал отдельные валидаторы
У меня там форм нет
Сейчас смотрю на graphql
Artemiy
20.09.2017
14:43:25
Понятно ) Спасибо!
Есть еще одно но, что если сервис вызывается из другого места, не из контроллера
т.е. к примеру не передали пароль, а в сервисе это не проверяется
Alexandr
21.09.2017
04:31:00
Google
Artemiy
21.09.2017
06:41:34
Я про случай, к примеру придётся потом вызвать сервис из консольной команды. Сервис же он на то и сервис что должен быть независимой сущностью.
Alexandr
21.09.2017
07:18:05
Artemiy
21.09.2017
07:21:09
Если использовать способ передачи в сервис готовой модели, получается что нет уверенности, например, что пароль не пустой.
Alexandr
21.09.2017
07:32:54
Если использовать способ передачи в сервис готовой модели, получается что нет уверенности, например, что пароль не пустой.
вы наверно не так поняли, что я писал выше, или я написал сумбурно :) Чтобы быть уверенным, что модель валидна, у вас несколько путей решения этой задачи.
Первый и достаточно очевидый - использовать валидатор внутри сервиса - инжектим/содаем инстанс и выполняем валидацию. Если не валидно, бросаем исключение/возвращаем ответ с состоянием.
Другой вариант, мы подразумеваем, что наша модель идет в сервис уже валидной, что означает, что вызов валидатора должен быть на уровень (или несколько выше), в том же контроллере или команде, но он должен быть обязательно. Да, я согласен, что by design, он более подвержен коллизиям, когда, к примеру, кто-то сделал вызов и передал параметром не прошедший валидацию аргумент. Но, все это регулируется соглашениями дизайна системы.
Почему я порекомендовал вынести валидатор выше на уровень, из сервиса - чтобы убрать выброс исключительной ситуации, к примеру, чтобы уменьшить количество затраченных шагов до проверки состояния объекта, чтобы упростить логику сервиса и т.п. Только ради этого.
Artemiy
21.09.2017
07:43:20
Понял, да, именно для безопасности и делаю в сервисе валидацию. Возможно ещё зависит от ситуации. Спасибо)
ol
21.09.2017
10:13:52
Такой вопрос!
Допустим есть поля в бд firstname lastname, можно ли их в один input затолкнуть ? Может, кто сталкивался
Artemiy
21.09.2017
10:15:08
по пробелу делил как-то
ol
21.09.2017
10:16:34
т.е. получается допустим делаю один input с Ф.И. , на выходе он мне пишет в два поля first и last
Artemiy
21.09.2017
10:17:13
типо того, но это если не очень важны эти данные, потому что все равно буду писать и ФИ и ИФ и ИИФ
будут* писать
ol
21.09.2017
10:18:05
блин, если даже 2 инпута сделать, могут писать коряво
от этого не застрахован ни кто
стоит ли вообще это делать ?
Artemiy
21.09.2017
10:18:50
объеденять в один? Большая форма?
ol
21.09.2017
10:19:00
да нет
сейчас вот как
Artemiy
21.09.2017
10:20:27
Я бы объеденил, можно ещё валидацию сделать что ввели два слова
ol
21.09.2017
10:20:54
она у меня в два этапа
заполнив эти поля, добавляет в БД, и редирект на другую форму
Google
ol
21.09.2017
10:21:53
может Учетку убрать, и сделать авторизацию по мылу только ?
Artemiy
21.09.2017
10:23:22
Сделай необязательное поле просто
ol
21.09.2017
13:00:25
как сделать, проверку поля на тру или фолс в контроллере ?
Dima
21.09.2017
13:08:13
взять из реквеста параметр и проверить?
ol
21.09.2017
13:08:41
не вариант
парни, а стоит ли разбивать телефон на префикс, код, номер ?
есть ли вообще смысл заморачиваться
?
Roman
21.09.2017
17:08:41
да
Admin
Roman
21.09.2017
17:08:58
код страны код региона номер
ol
21.09.2017
17:09:05
ну у меня так и есть
я думал, я мудак
Roman
21.09.2017
17:09:12
там еще какой то код вроде есть или нет
не
все так делают
большинство
ol
21.09.2017
17:09:28
ок
смотри, тут вопрос в голове возник вынести мыла и телефоны в отдельные таблицы, во первых для подтверждения гуд, и для рассылок, правильно я думаю ?
чтобы их не хранить в кэше где нить, пока не авторизует
Google
Roman
21.09.2017
17:52:20
Норм
ol
21.09.2017
18:42:16
подскажите, каким образом мне передать данные определенному урлу из контроллера ? например, http://test.domain/file.php?user=test&pass=password
знаю, file_get_content("url"), а если мне тупо отправить, тогда как ?
Artemiy
21.09.2017
19:08:58
@sheinan Подскажи плиз, можно ли использовать репозитории в контроллере, или только в сервисах?
ol
21.09.2017
19:09:14
можно
Artemiy
21.09.2017
19:09:29
а как инжектить их? делать репозиторий сервисом?
ol
21.09.2017
19:09:45
указываешь репу эту и все
Artemiy
21.09.2017
19:10:00
getRepository плохо же
правильнее же явно в параметрах инжектить
ol
21.09.2017
19:12:58
а зачем ты так делаешь ?
точнее верно
а ты что делаешь вообще ?
Artemiy
21.09.2017
19:13:47
findById
в контроллере вызвать хочу
ol
21.09.2017
19:14:09
в репозитории написал функцию ?
Artemiy
21.09.2017
19:14:14
да
ol
21.09.2017
19:14:32
а в контролере как делаешь?
Artemiy
21.09.2017
19:15:04
пока никак. раньше было getRepository... Хочу от этого указаться
чтобы явно указывать зависимости
ol
21.09.2017
19:15:26
тогда сервисы твои друзья
Artemiy
21.09.2017
19:16:10
ок, а как в сервис инжектить? делать репозиторий сервисом?
ol
21.09.2017
19:16:50
сервис как вызываешь ?