1

関連エンティティを含む送信元を送信するときに問題が発生しました。フォームを送信すると、次のエラー メッセージが表示されます。

Catchable Fatal Error: Argument 1 passed to 
My\ReportBundle\Entity\Clearance::setProjectProject() must be an instance of 
My\ReportBundle\Entity\Project, null given, called in
/var/www/Symfony/src/My/ReportBundle/Controller/DefaultController.php on line 85 and 
defined in /var/www/Symfony/src/My/ReportBundle/Entity/Clearance.php line 272

フォーム ビルダーのコードは次のようになります。

namespace My\ReportBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class ClearanceType extends AbstractType
{


public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        // Fields from the clearance entity removed ...
        // here is the problematic entry
        ->add('projectProject','entity',
         array('class'=>'My\ReportBundle\Entity\Project', 'property'=>'projectId'))
      ;
     }

      public function getName()
     {
         return 'my_reportbundle_clearancetype';
      }

コントローラーには次のコードが含まれています。

     public function newclearanceAction()
     {
    $request = $this->getRequest();
    $id = $request->query->get('projectId');
    $em = $this->getDoctrine()->getEntityManager();
    $project = $em->getRepository("MyReportBundle:Project")->find($id);

    $clearance = new Clearance();
    $clearance->setProjectProject($project);
    $form = $this->createForm(new ClearanceType(), $clearance);

    if ($request->getMethod() == 'POST'){
            $form->bindRequest($request);

            if($form->isValid()) {
                    $em = $this->getDoctrine()->getEntityManager();
                    $em->persist($clearance);
                    $em->flush();
                    return $this->
                    redirect($this->generateUrl('MyReportBundle_project_list'));
            }
         }
         return $this->render('MyReportBundle:Clearance:new.html.twig',
                 array('form'=>$form->createView()));

これを修正する方法がわかりません。助けてくれてありがとう!

4

1 に答える 1

0

フォームを投稿するとき、クエリ文字列に projectId を設定していますか?

試していない場合:

$request = $this->getRequest();

$em = $this->getDoctrine()->getEntityManager();
$clearance = new Clearance();

if($request->getMethod() != 'POST'){
    $id = $request->query->get('projectId'); 
    $project = $em->getRepository("MyReportBundle:Project")->find($id);
    $clearance->setProjectProject($project);
}
$form = $this->createForm(new ClearanceType(), $clearance);

IDでプロジェクトを見つけようとするとプロジェクトを取得できないため、エラーが発生します。したがって、プロジェクトを設定しようとすると、null値が渡されます。

于 2012-06-12T09:37:55.293 に答える