Symfony错误 - EntityManager#persist()期望参数1是一个实体对象,给定数组

sye*_*d_h 1 php arrays symfony-forms symfony doctrine-orm

我是symfony的新手..我在以数组的形式保存数据时遇到了一些麻烦..我每次都会收到此错误.

"EntityManager#persist()期望参数1是实体对象,给定数组.

500内部服务器错误 - ORMInvalidArgumentException"

这是我的代码..

我的表格类型

<?php

namespace Demo\FirstBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class ShiftType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('date', 'date', array(
            	'label' => 'Shift Date',
            	'attr' => array(
            		'class' => 'form-control'
            	)
            ))
            
            ->add('site_name', 'text', array(
            	'label' => 'Site Name',
            	'attr' => array(
            		'class' => 'form-control'
            	)
            ))

            ->add('location', 'text', array(
            	'label' => 'Site Location',
            	'attr' => array(
            		'class' => 'form-control'
            	)
            ))

            ->add('startTime', 'time', array(
            	'label' => 'Start time',
            	'attr' => array(
            		'class' => 'form-control'
            	)
            ))

            ->add('endTime', 'time', array(
            	'label' => 'End time',
            	'attr' => array(
            		'class' => 'form-control'
            	)
            ))


            ->add('save', 'submit', array(
            	'attr' => array(
            		'class' => 'btn btn-lg btn-primary'
            	)
            ));
    }

    public function getName()
    {
        return 'shifts';
    }
}
Run Code Online (Sandbox Code Playgroud)

默认控制器

<?php

namespace Demo\FirstBundle\Controller;

use Demo\FirstBundle\Entity\Shifts;
use Demo\FirstBundle\Form\Type\ShiftType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller
{
    public function indexAction()
    {
        return $this->render('DemoFirstBundle:Default:index.html.twig');
    }

    public function shiftAction(Request $request)
    {
    	$shift = new Shifts();

    	$em = $this->getDoctrine()->getManager();

    	$form = $this->createForm(new ShiftType());

    	$form->handleRequest($request);

    	if ($form->isValid()) {
    		$shift = $form->getData();
    		$em->persist($shift);
	        $em->flush();

    		return $this->redirect($this->generateUrl('demo_first_homepage'));
    	}

        return $this->render('DemoFirstBundle:Default:shifts.html.twig', array(
        		'shiftForm' => $form->createView(),
        	));
    }   
}
Run Code Online (Sandbox Code Playgroud)

我试过在文档中搜索这个问题,但找不到解决方案..请帮忙.

谢谢.!

qoo*_*mao 7

您应该将您的Shift实体传递到您的表单中,以便它被填充handleRequest.

$em = $this->getDoctrine()->getManager();

$shift = new Shifts();
// Pass the shift object into the form as the data property
$form = $this->createForm(new ShiftType(), $shift);

$form->handleRequest($request);

if ($form->isValid()) {
    $em->persist($shift);
    $em->flush();

    ...
}

...
Run Code Online (Sandbox Code Playgroud)

您还可以设置data_class表单以匹配您Janne Savolainen建议的模型/实体的表单.