我使用Symfony 2.8的嵌入式表单但我的控制器出现问题,它在有效值之间发送空白值。任何的想法?。感谢
这是twig的回忆:
结果:
在我的控制器中:
public function editarDetalleAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$session = $request->getSession();
$id = $session->get('id');
$detalles = $em->getRepository('ComponentesBundle:Receta_detalle')->findRecetaPorId($id);
$recetaDetalles = new Receta_detalle();
foreach ($detalles as $detalle){
$ingrediente = $detalle->getIngrediente();
$recetaDetalles->getDetalles()->add($detalle->setIngrediente($ingrediente));
$gramaje = $detalle->getGramaje();
$recetaDetalles->getDetalles()->add($detalle->setGramaje($gramaje));
}
$form = $this->createForm(new Receta_detalleCollectionType(), $recetaDetalles);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// $this->getDoctrine()->getManager()->flush();
}
return $this->render('ComponentesBundle:Backend:receta/edit_detalle.html.twig', array(
'form' => $form->createView(),
));
}
}
我的父母表格:
namespace ComponentesBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class Receta_detalleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('ingrediente')
->add('gramaje')
// ->add('receta')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'ComponentesBundle\Entity\Receta_detalle'
));
}
public function getBlockPrefix()
{
return 'componentesbundle_receta_detalle';
}
}
我的嵌入式表单:
namespace ComponentesBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use ComponentesBundle\Entity\Receta_detalle;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
class Receta_detalleCollectionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('detalles', CollectionType::class, array(
'entry_type'=> Receta_detalleType::class,
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'prototype_name' => 'detalles__name__',
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'ComponentesBundle\Entity\Receta_detalle'
));
}
public function getBlockPrefix()
{
return 'componentesbundle_receta_detalleCollection';
}
}
我的观点:
<h3>Detalle</h3>
{{ form_start(form) }}
{% for detail in form.detalles %}
{{ form_row(detail.ingrediente) }}
{{ form_row(detail.gramaje) }}
{% endfor %}
<input type="submit" value="Editar" />
{{ form_end(form) }}