Size: a a a

2020 June 29

Д

Дмитрий in Yii Framework 3
Roman Tsurkanu
последний аргумент озвучу.


Есть аутентификация, которая по механике - проверка данных в реквесте.

При этом никому в голову не приходит в каждом экшене контроллера писать if(notValid) return.

Пишут общую обработку до контроллера.

Я хочу так же как и с аутентификацией - получать в контроллере проверенные данные.
этот пример кардинально расходится с предыдущем про page/page_size.
в примере с авторизацией нам не нужны никакие данные из request'а. если не нужны данные, то это к мидлварам
источник

RT

Roman Tsurkanu in Yii Framework 3
я привел пример с аутентификацией как аргумент против - "иначе не найдешь, почему старый метод не работает"
источник

RT

Roman Tsurkanu in Yii Framework 3
ок, можно фичу по другому представить:

Я не хочу сетить и валидировать FormModel, хочу чтобы все параметры из реквеста прогонялись через FormModel и в контроллере я получал этот самый FormModel.

public function send(Request $request)
{
   $model = new MyFormModel::load($this->getContent());
   if (!$model->validate()) {
       return 'error';
   }

   return 'success';
}


VS

public function send(MyFormModel $request)
{
   return 'success';
}
источник

Д

Дмитрий in Yii Framework 3
тогда другое дело, я за.
в симфе тоже такое есть, можно сразу принимать формы в экшенах
источник

T🐜

The Ant 🐜 in Yii Framework 3
В апишках нет такого понятия как "форма". Есть валидатор реквеста.
Суть одно и тоже, конечно, но все же.
источник

А

Алексей R in Yii Framework 3
Дмитрий
тогда другое дело, я за.
в симфе тоже такое есть, можно сразу принимать формы в экшенах
там вроде это часть компайл паса
источник

T🐜

The Ant 🐜 in Yii Framework 3
Roman Tsurkanu
ок, можно фичу по другому представить:

Я не хочу сетить и валидировать FormModel, хочу чтобы все параметры из реквеста прогонялись через FormModel и в контроллере я получал этот самый FormModel.

public function send(Request $request)
{
   $model = new MyFormModel::load($this->getContent());
   if (!$model->validate()) {
       return 'error';
   }

   return 'success';
}


VS

public function send(MyFormModel $request)
{
   return 'success';
}
Скорее так:
public function send(Request $request)
{
   $dto = $reqquest->getData();
   // ...
   return 'success';
}
источник

А

Алексей R in Yii Framework 3
@yiiliveext кстати, у нас контейнер честно отвечает на ->has()?
источник

А

Алексей R in Yii Framework 3
например, если я запрашиваю MyFormModel из примера выше, то для рещолва нужен Request, который по хорошему не должен валяться в контейнере... has() вернёт false или там спекулятивная проверка, не дающая гарантий?
источник

RT

Roman Tsurkanu in Yii Framework 3
Дмитрий
тогда другое дело, я за.
в симфе тоже такое есть, можно сразу принимать формы в экшенах
А можешь плз скинуть ссылку на документацию симфони по этому поводу, не могу найти
источник

А

Алексей R in Yii Framework 3
Roman Tsurkanu
А можешь плз скинуть ссылку на документацию симфони по этому поводу, не могу найти
можно у них  в демо посмотреть, там вроде тоже есть примеры переноса логики в аннотации
источник

RT

Roman Tsurkanu in Yii Framework 3
источник

RT

Roman Tsurkanu in Yii Framework 3
оно?
источник

А

Алексей R in Yii Framework 3
ну да
источник

DS

Dmitriy S in Yii Framework 3
Алексей R
@yiiliveext кстати, у нас контейнер честно отвечает на ->has()?
Как отлежится мой пр с багфиксом контейнера и его смержат, то будут варианты. По дефолту нестрогая проверка, согласно пср (Если не дефинишина и класс существует, то вернет тру). Но можно будет вторым параметром указать strict = true, тогда будет проверять только на строгое наличие дефинишина.
источник

AB

Alexander Borisov in Yii Framework 3
В последних версиях есть argument value resolver - https://symfony.com/doc/current/controller/argument_value_resolver.html#adding-a-custom-value-resolver
источник

DS

Dmitriy S in Yii Framework 3
Алексей R
например, если я запрашиваю MyFormModel из примера выше, то для рещолва нужен Request, который по хорошему не должен валяться в контейнере... has() вернёт false или там спекулятивная проверка, не дающая гарантий?
Все делается сильно проще, мидлтварь fn => new FormValidator(LoginForm::class), внутри получает из контейнера инстанс формы, загружает данные и валидирует, когда доходит до контроллера в контейнере уже есть отвалидированный инстанс LoginForm, который можно получить из контейнера public function login(LoginForm $loginForm)
источник

А

Алексей R in Yii Framework 3
Dmitriy S
Как отлежится мой пр с багфиксом контейнера и его смержат, то будут варианты. По дефолту нестрогая проверка, согласно пср (Если не дефинишина и класс существует, то вернет тру). Но можно будет вторым параметром указать strict = true, тогда будет проверять только на строгое наличие дефинишина.
а второй параметр не интерфейсный уже?
источник

А

Алексей R in Yii Framework 3
Dmitriy S
Все делается сильно проще, мидлтварь fn => new FormValidator(LoginForm::class), внутри получает из контейнера инстанс формы, загружает данные и валидирует, когда доходит до контроллера в контейнере уже есть отвалидированный инстанс LoginForm, который можно получить из контейнера public function login(LoginForm $loginForm)
не проще, когда надо делать мидлварь
источник

DS

Dmitriy S in Yii Framework 3
Алексей R
а второй параметр не интерфейсный уже?
Нет, если контейнер не поддерживает его, то просто поигнорится
источник