【问题标题】:Symfony2 passed argument is nullSymfony2 传递的参数为空
【发布时间】:2012-12-18 17:31:22
【问题描述】:

我正在构建一个 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() 读取它。

我已经与这部分斗争了将近三天,非常感谢我能得到的每一个帮助!

【问题讨论】:

  • $caseStateId 有正确的值吗?您是否尝试将其转换为 (int) ?

标签: symfony null arguments


【解决方案1】:

我终于让它工作了!原因是 $request 缺少一些参数,因为 twig 模板缺少 form_rest(form)。添加之后,一切都开始工作了。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    相关资源
    最近更新 更多