symfony - Symfony 更新 twig.form.renderer 到 3.4
问题描述
我正在将项目从 3.1 升级到最新的 3.4(此时为 3.4.15)。
我已经设法升级了所有组件,现在我正在处理弃用。在一个控制器中,我有这个功能:
protected function themeForm(FormInterface $form)
{
$themeFormView = $form->createView();
$this
->get('twig.form.renderer')
->getExtension(FormExtension::class)
->renderer
->setTheme($themeFormView, '@admin/form/form.html.twig');
return $themeFormView;
}
我已经阅读了升级文档,我看到要删除弃用警告消息,我必须使用 Symfony\Component\Form\FormRenderer 而不是 twig.form.renderer。但是,示例显示的用例不同,我不知道如何删除弃用警告。我已经搜索了一个别名,但我没有找到任何别名。我创建了一个别名,但在尝试实例化该类时出现错误。因此,我想删除此警告。有人可以帮我吗?提前致谢。
解决方案是创建一个构造函数:
protected $twig;
public function __construct(FormRenderer $twig)
{
$this->twig = $twig;
}
并稍后调用该属性:
$this->twig
->setTheme($themeFormView, '@admin/form/form.html.twig');
有了这个,我仍然可以看到警告,所以我在 services.yml 中创建了一个公共别名:
Symfony\Component\Form\FormRenderer:
alias: 'twig.form.renderer'
public: true
我现在看不到弃用警告。
解决方案
你应该使用
$this
->get('twig.form.renderer')
->setTheme($themeFormView, '@admin/form/form.html.twig')
;
代替
$this
->get('twig.form.renderer')
->getExtension(FormExtension::class)
->renderer
->setTheme($themeFormView, '@admin/form/form.html.twig')
;
有一个循环参考,请参阅https://github.com/symfony/symfony/pull/20093和https://github.com/symfony/symfony/pull/20769以获取参考。
编辑关于您当前的问题:简而言之,使用依赖注入容器作为服务定位器是一件坏事,它不是故意的。您应该使用真正的依赖注入,即将您的控制器注册为服务并对其进行配置,以便 DIC 通过其构造函数或方法(操作)参数为其提供所需的服务。这是一个类似问题的完美答案,向您展示了如何做到这一点:stackoverflow.com/questions/47743626/symfony-3-4-logger-service。
推荐阅读
- javascript - 如何为d3.js中条形图中的每个条形分配不同的颜色
- wpf - WPF ListView CellTemplate 绑定
- java - Java 对与 HashMap
- javascript - 尝试淡入/淡出 html5 音频文件 vuejs / vanilla js
- html - 使用 CSS 和 Bootstrap 4 自定义边缘平滑的边框
- sql - 创建新列,所有内容都在另一列的第三和第四之间
- c++ - 来自 C++ 的 Angelscript 传输数组
- ruby - Ruby 地图给出了奇怪的结果
- c++ - 计算每个节点的树高,帮我解释一下这个代码解决方案
- javascript - 谷歌地图 Angular9 打开信息窗口时出错,找不到 getAnchor()