类型为“整数”,“ App \ Entity \ Material”的预期参数

时间:2018-07-06 11:24:42

标签: symfony doctrine

首先,我必须说我是Symfony的新手,如果您要问一个愚蠢的问题,请对不起。

我有一个控制器,该控制器构建的表单中带有一些EntityType字段,这些表单在模板中显示下拉列表,并且我还具有处理表单提交的基本代码。

我的问题是,提交此表单的时间看起来像是代码的某些部分(例如 $ form-> handleRequest($ request) $ entity = $ form-> getData( ))使发布的请求值处理 $ form 对象时崩溃,并在错误中指出这是因为在处理的第一个EntityType字段上,它期望的是整数类型而不是Entity对象类。 / p>

我看不出代码的问题所在,我只能说我期望将带有整数类型值的下拉列表发布为整数而不是实体对象:/

还请原谅我的英语不好,希望您能体面地理解所有内容。感谢您的阅读。

namespace App\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\Lot;
use App\Entity\Material;
use App\Entity\Provider;
use App\Entity\Responsable;

class CompraController extends Controller
{
/*
 * @Route("/buy_lot", name="buy")
 * @Method({"GET","POST"})
 */
public function index(Request $request)
{
    $lot = new Lot();
    $form = $this->createFormBuilder($lot, array('allow_extra_fields' => true))
        ->add('IDmaterial', EntityType::class, array(
            'class' => Material::class,
            'required' => true,
            'choice_value' => function ($material) {
                return $material ? $material->getIDmaterial() : '';
            },
            'choice_label' => function ($material1) {
                return $material ? $material->getNameMaterial() : '';
            }
        ))
        ->add('N_Lot', TextType::class, array(
            'required' => true,
        ))
        ->add('Quantity', IntegerType::class, array('required' => true))
        ->add('Price', NumberType::class, array(
            'required' => true,
            'scale' => 2,
        ))
        ->add('IDprovider', EntityType::class, array(
            'class' => Provider::class,
            'required' => true,
            'choice_value' => function ($provider) {
                return $provider ? $provider->getIDprovider() : '';
            },
            'choice_label' => function ($provider) {
                return $provider ? $provider->getNameProvider() : '';
            }
        ))
        ->add('IDresponsable', EntityType::class, array(
            'class' => Responsable::class,
            'required' => true,
            'choice_value' => function ($responsable) {
                return $responsable ? $responsable->getIDresponsable() : '';
            },
            'choice_label' => function ($responsable) {
                return $responsable ? $responsable->getNameResponsable() : '';
            }
        ))
        ->add('save', SubmitType::class, array('label' => 'Buy'))
        ->getForm();

    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
            $lot = $form->getData();
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($lot);
            $entityManager->flush();
        return $this->redirectToRoute('buy');
    }

    return $this->render('stock_app/buy.html.twig', [ 
       'form' => $form->createView(),
    ]);
}

我的地块实体(应该被刷新)的变量看起来像:

/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $IDlot;

/**
 * @ORM\Column(type="integer", nullable=true)
 */
private $N_Lot;

/**
 * @ORM\Column(type="integer", nullable=true)
 */
private $Quantity;

/**
 * @ORM\Column(type="float", scale=2, nullable=true)
 */
private $Price;

/**
 * @ORM\OneToMany(targetEntity="Provider", mappedBy="IDprovider", cascade={"persist"})
 * @ORM\Column(type="integer")
 */
private $IDprovider;

/**
 * @ORM\OneToMany(targetEntity="Responsable", mappedBy="IDresponsable", cascade={"persist"})
 * @ORM\Column(type="integer")
 */
private $IDresponsable;

/**
 * @ORM\OneToMany(targetEntity="Material", mappedBy="IDmaterial", cascade={"persist"})
 * @ORM\Column(type="integer")
 */
private $IDmaterial;

1 个答案:

答案 0 :(得分:1)

从以下位置更改您的学说注释:

/**
 * @ORM\OneToMany(targetEntity="Material", mappedBy="IDmaterial", cascade={"persist"})
 * @ORM\Column(type="integer")
 */
private $IDmaterial;

收件人:

/**
 * @ORM\OneToMany(targetEntity="Material", mappedBy="IDmaterial", cascade={"persist"})     
 */
private $material;

您无需在关系属性中指定列类型,因此在所有关系定义中都将其省略