@symfony_ru

Страница 90 из 138
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


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
сервис как вызываешь ?

Страница 90 из 138