我正在使用 Symfony版本2.7.6 。我创建了一个名为 EmployeeBasicInfo 的实体,其中包含字段
我创建了一个回调函数,用于验证 EmployeeBasicInfo 实体本身的识别代码,看起来像
/**
* @Assert\Callback(groups={"edit_myinfo"})
*/
public function validateIdentificationCode(ExecutionContextInterface $context)
{
if ($this->getEmployeeFirstName() == 'fakename') {
$context->buildViolation('This name sounds totally fake!')
->atPath('employeeFirstName')
->addViolation();
}
}
,此回调功能正常运作
实际上我想要这样的回调功能,它可以根据数据库检查识别代码。我在回调函数中添加了 $ em = $ this-> getDoctrine() - > getManager(); ,错误就像尝试调用名为“getDoctrine”的未定义方法类“XXX \ EmployeeBundle \ Entity \ EmployeeBasicInfo”。。请告诉我有效的方法
答案 0 :(得分:3)
不要在您的实体中注入EntityManager。 DataMapper-Pattern的一个基本概念是,您的实体不必了解您的数据源及其连接器。
我建议编写一个自定义验证约束,在其中注入所需的依赖项。
EntityManager,要查询的存储库等等。无论什么服务都适合你。
查看how to create custom constraint validators with dependencies
答案 1 :(得分:0)
我建议您使用服务来执行此操作
class EmployeeUtility($connection)
{
public function __construct($conn) { $this->connection = $v; }
public function validateIdentificationCode($emloyeeId, $validationCode)
{
// Your code here
}
}
在您的控制器中,您注入服务:
$employeeUtility = $this->get('employee.utility');
$employeeUtility->validateIdentificationCode(1,'GF38883dkDdW3373d');
或者,将代码添加到存储库类中。