【问题标题】:Symfony2 - database checking in entity callback functionSymfony2 - 实体回调函数中的数据库检查
【发布时间】:2015-12-16 09:53:18
【问题描述】:

我使用的是 Symfony 2.7.6 版。我创建了一个名为 EmployeeBasicInfo 的实体,其中包含字段

名字 姓 识别码等

我创建了一个回调函数,用于验证 EmployeeBasicInfo 实体本身中的标识代码,如下所示

    /**
     * @Assert\Callback(groups={"edit_myinfo"})
     */
    public function validateIdentificationCode(ExecutionContextInterface $context)
    {

        if ($this->getEmployeeIdentificationCode() == 10) {

            $context->buildViolation('Identification code exists!')
                ->atPath('employeeFirstName')
                ->addViolation();


        }
    }

我想重新定义具有数据库检查的相同功能。问题是我无法在此函数中查询数据库。我试过 $this->getDoctrine()->getManager();和所有。但是失败了。我也有使用 codeigniter 和 yii 的圆顶。请大家帮帮我

这是我得到的错误尝试调用类“XXX\EmployeeBundle\Entity\EmployeeBasicInfo”的名为“getDoctrine”的未定义方法

【问题讨论】:

  • 为了澄清,您将$this->getDoctrine()->getManager() 添加到validateIdentificationCode 并引发了此异常?您的实体 EmployeeBasicInfo 是(我假设)一个 POPO(普通的旧 PHP 对象),因此不会从任何 ContainerAware 父级继承。您必须将 EntityManager 注入您的实体 - 尽管我认为这不是最佳实践。有趣的问题...

标签: php mysql symfony doctrine


【解决方案1】:

你做错了。实体应该尽可能简单,应该没有逻辑。您应该将您的数据库检查从您的实体移到某个服务,在那里注入 Doctrine 并在服务内部进行检查。

你得到的错误只是说你正在尝试调用你的实体中不存在的方法getDoctrine(没关系,你的实体不应该有这样的方法)。

【讨论】:

  • 我已经有一个 app.util 服务,里面有一个函数。我从这个实体调用它,比如 $this->get('app.util')->test()。同样,我也遇到了一些错误
  • 您是否将服务注入实体?如果不是,您的实体对您的服务或教义一无所知,这就是您收到错误的原因。您不应该在实体中使用此功能,而应在服务中使用此功能
  • 是他们的任何参考链接,用于创建服务、将其配置为 doctrine 并注入实体???
  • 我是 symfony 的新手..请帮帮我...它占用了我很多时间
  • 不,因为你不应该向实体注入任何东西
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
相关资源
最近更新 更多