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 との manyToOne 関係があります。
これは、formBuilder の add() メソッドを使用してこの手動作業をすべてスキップすると問題なく動作しますが、ネストされたツリー構造から CaseState を選択するために非常に特殊な自動入力 jQuery ドロップダウンを使用しているため、手動で追加する必要がありました。ドロップダウンし、$request->request->get() で読み取ります。
私はこの部分とほぼ 3 日間格闘してきました。