Size: a a a

2020 August 16

Д

Дмитрий in Yii Framework 3
Сергей Предводителев
Доброе утро!

С утра придумал как сделать немного попроще удаление из ViewRenderer всего, что касается csrf.

PR #122

Сделал так называемые "иньекции" во view. Это позволило очистить ViewRenderer, вынести всё что касается CSRF в один файл CsrfInjection, и получить в приложении одно место (ApplicationInjection), где можно удобно задать параметры, мета-теги и link-теги для вьюх.

При таком подходе:
ViewRenderer можно вынести в пакет (отдельный, или может yiisoft/view)
CsrfInjection вынести также в отдельный пакет или в yiisoft/yii-web

Конфигурация вышла простой и понятной, пример:

'viewRenderer' => [
   'viewBasePath' => '@views',
   'layout' => '@views/layout/main',
   'injections' => [
       Reference::to(CsrfInjection::class),
       Reference::to(ApplicationInjection::class),
   ],
],


Пример ApplicationInjecion:

class ApplicationInjection extends AbstractInjection
{

   private User $user;
   private UrlMatcherInterface $urlMatcher;

   public function __construct(
       User $user,
       UrlMatcherInterface $urlMatcher
   ) {
       $this->user = $user;
       $this->urlMatcher = $urlMatcher;
   }

   public function getLayoutParams(): array
   {
       return [
           'user' => $this->user->getIdentity(),
           'currentUrl' => (string)$this->urlMatcher->getLastMatchedRequest()->getUri(),
           'brandLabel' => 'Yii Demo',
       ];
   }

   public function getMetaTags(): array
   {
       return [
           [
               '__key' => 'generator',
               'name' => 'generator',
               'value' => 'Yii',
           ],
       ];
   }

   public function getLinkTags(): array
   {
       return [
           [
               '__key' => 'favicon',
               'name' => 'icon',
               'value' => 'favicon.ico',
           ],
       ];
   }
}


Что скажете?
Не смотрел ПР, но уже не нравится имя AbstractInjection, которое не говорит ни о чем и его размытый функционал с приведенными методами.
источник

СП

Сергей Предводителев... in Yii Framework 3
Дмитрий
Не смотрел ПР, но уже не нравится имя AbstractInjection, которое не говорит ни о чем и его размытый функционал с приведенными методами.
Методы вроде предельно понятные?
источник

СП

Сергей Предводителев... in Yii Framework 3
Абстрактный для удобства, чтобы методы не реализовывать, когда там возвращаются пустые массивы
источник

AB

Alexander Borisov in Yii Framework 3
Речнь наверное про нейминг. InjectionInterface -> ViewInjectionInterface
источник

СП

Сергей Предводителев... in Yii Framework 3
Alexander Borisov
Речнь наверное про нейминг. InjectionInterface -> ViewInjectionInterface
Да, так наверное лучше
источник

Д

Дмитрий in Yii Framework 3
Сергей Предводителев
Абстрактный для удобства, чтобы методы не реализовывать, когда там возвращаются пустые массивы
В таком случае нужна разделять интерфейс на несколько.
источник

СП

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

СП

Сергей Предводителев... in Yii Framework 3
Сейчас попробую
источник

СП

Сергей Предводителев... in Yii Framework 3
Дмитрий
В таком случае нужна разделять интерфейс на несколько.
Выпилил абстрактный класс и сделал отдельные интерфейсы.. норм?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Выпилил абстрактный класс и сделал отдельные интерфейсы.. норм?
Я думаю рефакторить сторонние файлы, не относящиеся к пр, нехорошо.
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Я думаю рефакторить сторонние файлы, не относящиеся к пр, нехорошо.
О каком файле речь?
источник

DS

Dmitriy S in Yii Framework 3
источник

СП

Сергей Предводителев... in Yii Framework 3
Мм... хотел показать, как используется ApplicationViewInjection
источник

DS

Dmitriy S in Yii Framework 3
Ну тогда ладно, хотя и применение мешать с пр так себе вариант.
источник

СП

Сергей Предводителев... in Yii Framework 3
Тут может быть тогда только $brandLabel не стоило делать, а остальное-то как раз ложится в PR.
источник

DS

Dmitriy S in Yii Framework 3
но название метода injectContent все равно какое-то неправильное. Если он что-то возвращает, то это геттер, было бы неплохо как-то разнести действия по инжекту метатегов и получению параметров
источник

СП

Сергей Предводителев... in Yii Framework 3
Сейчас попробую...
источник

DS

Dmitriy S in Yii Framework 3
Типа getContentParameters`и `injectMetaTags
источник

DS

Dmitriy S in Yii Framework 3
Надо все-таки определиться, нормально ли это зависимости запихивать в параметры
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Типа getContentParameters`и `injectMetaTags
Это сделал
источник