首页 > 解决方案 > 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

我现在看不到弃用警告。

标签: symfonyupgradedeprecation-warning

解决方案


你应该使用

$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/20093https://github.com/symfony/symfony/pull/20769以获取参考。

编辑关于您当前的问题:简而言之,使用依赖注入容器作为服务定位器是一件坏事,它不是故意的。您应该使用真正的依赖注入,即将您的控制器注册为服务并对其进行配置,以便 DIC 通过其构造函数或方法(操作)参数为其提供所需的服务。这是一个类似问题的完美答案,向您展示了如何做到这一点:stackoverflow.com/questions/47743626/symfony-3-4-logger-service。


推荐阅读