You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony PHPUnit:解决直接获取validator服务的弃用提示

在PHPUnit测试中通过依赖注入使用Validator服务

问题背景

在PHPUnit测试的setUp()方法中直接从容器获取validator服务:

$this->validator = static::$kernel->getContainer()->get('validator');

会收到弃用提示:

Accessing the "validator" service directly from the container is deprecated, use dependency injection instead.

以下是两种正确的依赖注入改造方式:

方式1:构造函数注入(Symfony 6.1+ 推荐)

直接在测试类的构造函数中声明ValidatorInterface依赖,框架会自动完成注入:

use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class YourTest extends KernelTestCase
{
    public function __construct(
        private readonly ValidatorInterface $validator,
        ?string $name = null,
        array $data = [],
        $dataName = ''
    ) {
        parent::__construct($name, $data, $dataName);
    }

    public function testValidation(): void
    {
        // 直接使用注入的validator实例
        $errors = $this->validator->validate($yourTestObject);
        
        // 编写断言逻辑
        $this->assertEmpty($errors);
    }
}

方式2:通过接口类型从容器获取(兼容旧版本Symfony)

如果使用的是Symfony 6.0及以下版本,可在setUp()中通过接口类型而非字符串服务ID获取实例:

use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class YourTest extends KernelTestCase
{
    private ValidatorInterface $validator;

    protected function setUp(): void
    {
        parent::setUp();
        self::bootKernel();
        
        // 使用接口类型获取服务,替代字符串'service'
        $this->validator = self::$container->get(ValidatorInterface::class);
    }

    public function testValidation(): void
    {
        $errors = $this->validator->validate($yourTestObject);
        $this->assertEmpty($errors);
    }
}

关键说明

  • 避免直接使用字符串服务ID(如'validator')获取服务,改用对应接口类型,既符合依赖注入规范,也能获得类型提示支持。
  • 构造函数注入是Symfony 6.1+的推荐方式,无需手动启动内核和获取容器,代码更简洁。

内容的提问来源于stack exchange,提问作者cheryllium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:05:25