Д
С утра придумал как сделать немного попроще удаление из 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',
],
];
}
}
Что скажете?