Прежде всего я должен сказать, что я новичок в Symfony, поэтому извините, если задаю какой-то глупый вопрос.
У меня есть контроллер, который создает форму с некоторыми полями EntityType, которые отображают раскрывающиеся списки в шаблоне, и у меня также есть базовый код для обработки отправки формы.
Моя проблема заключается в том, что когда форма отправляется, она выглядит в некоторой части кода (например, $ form-> handleRequest ($ request) или $ entity = $ form-> getData () ) происходит сбой при обработке объекта $ form с опубликованными значениями запроса, и в сообщении об ошибке указывается, что это происходит потому, что в первом обработанном поле EntityType он ожидает целочисленный тип вместо класса объекта Entity.
Я не вижу, в чем проблема в моем коде, все, что я могу сказать, - я ожидаю, что выпадающие списки со значениями целочисленного типа будут опубликованы как целые числа, а не как объекты Entity: /
Также извините за мой плохой английский, надеюсь, вы все поняли прилично. Спасибо за чтение.
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;