【问题标题】:Symfony is not loading the correct validation serviceSymfony 没有加载正确的验证服务
【发布时间】:2018-06-28 21:03:40
【问题描述】:

我正在使用 Symfony 框架 3.4。目前我正在研究一种验证方法,但突然 Symfony 验证停止工作,然后我所有的验证都停止工作,然后我运行:

php bin/console debug:container

我得到了验证器服务的以下输出:

 Service ID                             ClassName                         
  validator              alias for "liip_functional_test.validator"

我有以下问题: 这是验证器服务的正确类名吗? 我做错了什么?

我的整个代码是这样的:

namespace AppBundle\DataTransfer;

use Symfony\Component\Validator\Constraints as Assert;

class ProductFromApi
{

   /**
     * @Assert\IsTrue(message="Testing the validator")
     */
    public function isTestCorrect() : Bool
    {
        return false;
    }
}

【问题讨论】:

  • 我真的对这个覆盖感到困惑,但经过快速搜索,我发现了类似的 SO 问题:stackoverflow.com/questions/35876322/…
  • 是的,但问题是即使我解决了最重要的问题,验证器仍然无法工作。当我运行时: php bin/console debug:container validator 我得到了与以下答案相同的结果:Cameron Hurd
  • 我没有直接使用validator服务,我使用的是form->isValid(),这个form应该使用validator服务。
  • 你能分享更多你的配置吗?也许service.yml,以及您认为可能相关的config.yml 的摘录?如果控制器中的方法有什么不寻常的地方,看看也可能会有所帮助!
  • 嗨,我停止了 docker 并再次进行了 docker-compose,现在它正在工作,这很奇怪,因为我已经完成了:php bin/console cache:clear 之前。谢谢大家。

标签: php symfony validation containers


【解决方案1】:

看起来服务 "validator" 是默认 symfony 验证器以外的其他东西的别名,不是吗? (具体为“liip_functional_test.validator”)

当我在 Symfony 项目上运行 php bin/console debug:container validator 时,我知道它没有你上面提到的那个 liip 包,这是它返回给我的:

Information for Service "debug.validator"
=========================================

 ---------------- ----------------------------------------------------------
  Option           Value
 ---------------- ----------------------------------------------------------
  Service ID       debug.validator
  Class            Symfony\Component\Validator\Validator\TraceableValidator
  Tags             kernel.reset (method: reset)
  Public           no
  Synthetic        no
  Lazy             no
  Shared           yes
  Abstract         no
  Autowired        no
  Autoconfigured   no
 ---------------- ----------------------------------------------------------

如果您按名称从 DI 容器中获取服务,也许您想将其称为“debug.validator”。

也就是说,您可能不应该以这种方式调用验证器。

您的config.yml 中有以下内容,是吗?

framework:
    validation: { enable_annotations: true }

【讨论】:

  • 是的,我的 config.yml 中有这个 YAML。我从我的 AppKernel 中删除了 liip_functional_test.validator 包,然后我得到了和你一样的输出,但是验证器不起作用。
猜你喜欢
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多