Php 类型错误:传递给Controller::createFormBuilder()的参数2必须是在中调用的数组类型、给定对象
我使用symfony表单在html上创建表单,以更新数据库表中的列值 但是当我运行我的代码时,我得到了这个错误 在这一行Php 类型错误:传递给Controller::createFormBuilder()的参数2必须是在中调用的数组类型、给定对象,php,html,forms,symfony,session,Php,Html,Forms,Symfony,Session,我使用symfony表单在html上创建表单,以更新数据库表中的列值 但是当我运行我的代码时,我得到了这个错误 在这一行 $form = $this->createFormBuilder(new User(), $investor) 我的用户实体文件 <?php namespace AppBundle\Entity; use FOS\UserBundle\Model\User as BaseUser; use Doctrine\ORM\Mapping as ORM; /**
$form = $this->createFormBuilder(new User(), $investor)
我的用户实体文件
<?php
namespace AppBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="`user`")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
*@var integer
*
* @ORM\Column(name="MatchP",type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $MatchP;
public function getMatchP()
{
return $this->MatchP;
}
public function setMatchP($MatchP)
{
$this->MatchP = $MatchP;
}
public function __construct()
{
parent::__construct();
}
}
我的默认控制器文件
<?php
namespace site\blogBundle\Controller;
use AppBundle\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class DefaultController extends Controller
{
public function indexAction(Request $request)
{
//$task = new User();
$user = $this->container->get('security.context')->getToken()->getUser();
$investor = $this->getDoctrine()->getRepository('AppBundle:User')->findOneBy(array('id' => $user->getId()));
$MatchP = $investor->getMatchP();
$form = $this->createFormBuilder(new User(), $investor)
->add('MatchP', TextType::class)
->add('save', SubmitType::class, array('label' => 'Create Task'))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if(!empty($form->get('MatchP')->getData())){
$investor->setMatchP($form->get('MatchP')->getData());
}
else{
$investor->setMatchP($MatchP);
}
$em = $this->getDoctrine()->getManager();
$em->persist($investor);
$em->flush();
$session = $this->getRequest()->getSession();
$session->getFlashBag()->add('message', 'Votre profil a été correctement modifié');
return $this->redirectToRoute('task_success');
}
return $this->render('siteblogBundle:Default:index.html.twig', array(
'form' => $form->createView(),
));
}
}
createFormBuilder或createBuilder的第二个参数应该是名为data_class的选项数组
FormBuilder createFormBuildermixed$data=null,array$options=array
混合$data是表单的初始数据
表单的数组$options选项
<?php
namespace site\blogBundle\Controller;
use AppBundle\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class DefaultController extends Controller
{
public function indexAction(Request $request)
{
//$task = new User();
$user = $this->container->get('security.context')->getToken()->getUser();
$investor = $this->getDoctrine()->getRepository('AppBundle:User')->findOneBy(array('id' => $user->getId()));
$MatchP = $investor->getMatchP();
$form = $this->createFormBuilder(new User(), $investor)
->add('MatchP', TextType::class)
->add('save', SubmitType::class, array('label' => 'Create Task'))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if(!empty($form->get('MatchP')->getData())){
$investor->setMatchP($form->get('MatchP')->getData());
}
else{
$investor->setMatchP($MatchP);
}
$em = $this->getDoctrine()->getManager();
$em->persist($investor);
$em->flush();
$session = $this->getRequest()->getSession();
$session->getFlashBag()->add('message', 'Votre profil a été correctement modifié');
return $this->redirectToRoute('task_success');
}
return $this->render('siteblogBundle:Default:index.html.twig', array(
'form' => $form->createView(),
));
}
}