zelenin писал(а):да чем способы реализации отличаются? тем что в первом это происходит в разных местах проверка? способы идентичны.
Да тем что проверка происходит в разных местах. У одного в екшене контроллера у другого в анонимной функции поведения. И я называю это разными реализациями. Дальше на этот счет спорить не вижу смысла.
zelenin писал(а):Вы почему-то разделяете права, которые требуют для проверки модель и которые не требуют, и почему-то требующие модель, хотите вынести в экшн. Зачем?
Нет. Я просто проверяю права по ходу получения информации приложением. Конкретно в этом примере получить модель которую мы передаем в проверку достаточно просто. Вызовом findModel. Но могут быть ситуации где прежде чем мы получим модель которую отправим на проверку мы должны будем проделать много операций. Грубо говоря гет параметр нельзя будет тривиально превратить в модель.
mickgeek писал(а):
вызов User::can() в ActionColumn не требует эксепшена, а решение с проверкой прав в экшене является не только самым тривиальным, но и фактически имеет дублирование ошибки доступа. Судя по тому, что изначально Вы не удосужились воспользоваться поиском или поискать упоминания о "bizRule" в документации, вряд ли Вам нужна сложная функция с кешированием модели. Но Вы правы, выбор решения - дело вкуса, а качество кода пропорционально зависит от квалификации разработчика.
Я удосужился поискать упоминание о bizRule. Я даже нашел пользовательскую документацию где описывалось как все это реализовать в yii 2.0
Как видим в дальнейшем этот параметр уже убрали с второй версии. И та документация стала не актуальной. Что и ввело меня в замешательство. По поводу метода с кешированием я уже сказал что это 2 стороны одной медали. И привел пример когда из за него может быть ошибка.
zelenin писал(а):
на второе возразил, что вы используете одинаковый метод, который делает необходимое количество запросов. Вы вынесли в экшн и закэшировали модель в переменную, а можно аналогично закэшировать модель в findModel. Таким образом лишний запрос никак не может сказаться на правильности использования одного или второго способа.
метод то используется тот же. Только вызывается он 2 раза =) И сейчас мы пытаемся решить как сделать что бы этот метод не делал 2 запроса если мы его вызовем 2 раза. И естественно это можно сделать. Но этот вопрос мы уже обсуждали.
zelenin писал(а):
я ждал когда поднимется тема ненужности исключения, поэтому не указал вам ранее, когда может понадобиться несколько раз воспользоваться findModel(), т.к. исключение нужно выбросить только если запрашиваем доступ к странице с отсутствующей сущностью. В остальных случаях, как правило нужно вернуть null.
Полностью согласен.