我正在构建一个 CRM 系统,但遇到了一个我无法解决的奇怪问题。当我尝试创建一个新的 CustomerCase 实体时,我想为其分配一个 CaseState 实体,所以这就是我在 CustomerCaseController.php 的 createAction 中所做的:
$caseStateId = $request->request->get('caseState_id');
$caseState = $this->getDoctrine()->getManager()->getRepository('HSWAshaBundle:CaseState')->findOneById($caseStateId);
$entity = new CustomerCase();
$entity->setCaseState($caseState);
...... etc.....
一切正常,直到setCaseState方法。运行 setCaseState 后,出现以下错误:
Catchable Fatal Error: Argument 1 passed to HSW\AshaBundle\Entity\CustomerCase::setCaseState() must be an instance of HSW\AshaBundle\Entity\CaseState, null given, called in /home/webuser/Symfony/vendor/symfony/symfony/src/Symfony/Component/Form/Util/PropertyPath.php on line 538 and defined in /home/webuser/Symfony/src/HSW/AshaBundle/Entity/CustomerCase.php line 843
奇怪的是,$caseState 确实是一个 CaseState 对象(因为例如 $caseState->getName() 有效,并为我提供了所选 CaseState 的正确名称)。出于某种令人兴奋的原因,当我使用 setCaseState 方法时,它只是变为 null 。如果我执行 $entity->setCaseState($customerStateObject->getId()),我会收到相同的错误消息,但这次 null 更改为整数。
CustomerCase 与 CaseState 具有多对一关系。
如果我使用 formBuilder 的 add() 方法并跳过所有这些手动工作,这工作得很好,但由于我使用非常特定的自动填充 jQuery 下拉菜单从嵌套树结构中选择 CaseState,我必须手动添加下拉列表并使用 $request->request->get() 读取它。
我已经与这部分战斗了将近三天,非常感谢我能得到的每一个帮助!