• Можно ли как-то разом изменить свойство у всех экземпляров класса?

    @PatriotSY Автор вопроса
    Антон Швец, спасибо за ссылку! Уже изучаю как с этим работать, и есть уже вопросы)) Создам отдельную запись по вопрос :)
    Написано
  • Как прервать выполнение запроса?

    @PatriotSY Автор вопроса
    Получилось. Спасибо!
    Написано
  • Как прервать выполнение запроса?

    @PatriotSY Автор вопроса
    Спасибо, так гораздо лучше :)
    Написано
  • Как прервать выполнение запроса?

    @PatriotSY Автор вопроса
    Конечно, этот параметр у меня присутствует, но он работает только при вводе пользователем. После ввода, если пользователь кликает мышью или ентерем выбирает нужный пункт, то функция срабатывает с search = null. Возможно надо на это багрепорт сделать в библиотеке.
    И без промиса как реализовывать? Через subscribe не получилось: ругается на возвращаемый тип
    <Observable<HttpResponse<Country[]>>
    а ожидает <Observable<Country[]>
    Написано
  • Где и кто должен делать валидацию?

    @PatriotSY Автор вопроса
    Еще посидел подумал: двойной валидации можно избежать, т.к. в RegistrationForm после первой валидации уже содержаться ошибки. Для наглядность переименовал в RegistrationData и вроде не плохо получилось:
    Controller:
    public function actionRegistration()
        {
            $registrationData = Yii::createObject(RegistrationData::class);
            $registrationData->load($this->getRequest()->post(), '');
    
            $user = $this->accountService->registrationUser($registrationData);
            if ($user) {
                return $this->accountService->generateToken($user)->token;
            } else {
                throw new BadRequestHttpException(implode('; ', $registrationData->getFirstErrors()));
            }
        }


    и сервис:

    public function registrationUser(RegistrationData $data): ?User
        {
            if (!$data->validate()) {
                return null;
            }
            $user = $this->userRepository->create($data->getAttributes());
            $user->setPassword($data->password);
            if ($this->userRepository->save($user)) {
                return $user;
            }
            return null;
        }
    
        public function generateToken(User $user): UserToken
        {
            $userToken = $this->userTokenRepository->create([
                'user_id' => $user->id,
                'token' => md5(mktime() . uniqid()),
                'ip' => $this->getRequest()->userIP ?? '127.0.0.1'
            ]);
    
            if (!$this->userTokenRepository->save($userToken)) {
                throw new Exception('Can\'t save user token');
            }
    
            return $userToken;
        }


    Далее уже буду на интерфейсы переводить зависимости :)
    Написано
  • Где и кто должен делать валидацию?

    @PatriotSY Автор вопроса
    А не create ли должен дергать validate внутри себя? Что бы гарантировать, что не пройдут невалидные данные, а то если не дергать публичный validate, то можно отправить кривые данные? Или может тогда в сервис передавать RegistrationForm и и в методе create дергать $form->validate() ? Это будет гарантировать что пришла валидная форма данных, но тогда появляется другая проблема: двойная валидация. Сначала в контроллере, что бы сразу сообщить назад что данные не валидные, а потом в сервисе - для гарантии пришедших данных. Выглядит так себе.
    Написано
  • Где и кто должен делать валидацию?

    @PatriotSY Автор вопроса
    Разделил RegistrationForm и User, делаю валидацию в контроллере, но теперь смотрю на сервис и думаю: а откуда сервис знает что ему пришли валидные данные. В этом экшене да, мы их проверяем, но вот из другого места будут использовать этот сервис и закинут туда уже непроверенные данные. Может надо и там и там делать валидацию? Но тоже какая-то копипаста получается..
    Написано