表单验证(Sym2) - 参数号无效:绑定变量数与令牌数不匹配

时间:2012-04-02 17:49:28

标签: php symfony doctrine-orm symfony-forms

我正在使用Symfony2 + Doctrine 2

在动态表单的验证中给出了这个错误并且不明白为什么。我将一个或多个'conocimiento'(标签)添加到“Recurso”类时才会出错

我在这里介绍相应的课程

class Recurso
{
...

 /**
 * @var TheWire\PersonaBundle\Entity\Rec_Conocimiento $conocimiento
 *, 
 * @ORM\OneToMany(targetEntity="TheWire\PersonaBundle\Entity\Rec_Conocimiento", mappedBy="recurso", cascade={"all"}, orphanRemoval="true")
 */
private $conocimiento;

...


public function __construct() {
    $this->conocimiento = new \Doctrine\Common\Collections\ArrayCollection();
}

....


/**
 * Set conocimiento
 *
 * @param \TheWire\PersonaBundle\Entity\Rec_Conocimiento $conocimiento
 */
public function setConocimiento($conocimiento)
{
    $this->conocimiento = $conocimiento;
    foreach ($conocimiento as $con){
    $con->setRecurso($this);
    }
}

/**
 * Get conocimiento
 *
 * @return \Doctrine\Common\Collections\ArrayCollection
 */
public function getConocimiento()
{
    return $this->conocimiento;
}

.....

class Rec_Conocimiento
{

/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * 
 * @ORM\id
 * @ORM\ManyToOne(targetEntity="TheWire\PersonaBundle\Entity\Recurso", inversedBy="conocimiento")
 * @ORM\JoinColumn(name="recurso_id", referencedColumnName="id")
 */
private $recurso;

/**
 * @var string $conocimiento
 * @ORM\Id
 * @ORM\ManyToOne(targetEntity="TheWire\PersonaBundle\Entity\Conocimiento")
 */
private $conocimiento;

/**
 * @var smallint $nivel
 * 
 * @ORM\Column(name="nivel", type="smallint")
 */
private $nivel;


/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set recurso
 *
 * @param \TheWire\PersonaBundle\Entity\Recurso $recurso
 */
public function setRecurso(\TheWire\PersonaBundle\Entity\Recurso $recurso)
{
    $this->recurso = $recurso;
}

/**
 * Get recurso
 *
 * @return \TheWire\PersonaBundle\Entity\Recurso
 */
public function getRecurso()
{
    return $this->recurso;
}

/**
 * Set conocimiento
 *
 * @param string $conocimiento
 */
public function setConocimiento(\TheWire\PersonaBundle\Entity\Conocimiento $conocimiento)
{
    $this->conocimiento = $conocimiento;
}

/**
 * Get conocimiento
 *
 * @return string 
 */
public function getConocimiento()
{
    return $this->conocimiento;
}

/**
 * Set nivel
 *
 * @param smallint $nivel
 */
public function setNivel($nivel)
{
    $this->nivel = $nivel;
}

/**
 * Get nivel
 *
 * @return smallint 
 */
public function getNivel()
{
    return $this->nivel;
}

...

类TheWire \ PersonaBundle \ Entity \ Conocimiento只有$ id和$ name(标签)

我创建了表单:

class RecursoAddType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder

  ->add('conocimiento', 'collection', array(
                'required' => false,
                'type' => new ConocimientoAddType(), 
                'allow_add' => true,
                'allow_delete' => true,
                'prototype' => true,
                // Post update
                'by_reference' => false,
                ))
    ;
  }

class ConocimientoAddType extends AbstractType
{
 public function buildForm(FormBuilder $builder, array $options)
{
$builder
  ->add('conocimiento', 'entity', array(
            'required' => false,
            'class' => 'TheWire\\PersonaBundle\\Entity\\Conocimiento',
            'empty_value' => 'Selecciona un conocimiento',
            'multiple' => false,
            'query_builder' => function(EntityRepository $repositorio) {
                return $repositorio->createQueryBuilder('con')->leftjoin('con.bloque', 'bloque')
                    ->orderBy('bloque.descripcion, con.descripcion');
            },
        ))
  ->add('nivel', null,array('required' => false, 'label' => 'Nivel: '))
  ;
 }

我在控制器中正常创建,在db中有一个实体并传递给Twig

$recurso = $em->getRepository('PersonaBundle:Recurso')->findOneBy(array('id' => $id));
$formularioEditarRecurso = $this->createForm(new RecursoAddType(), $recurso);

我显示表单并使用jquery动态添加更多字段

<script type="text/javascript">
$(document).ready(function() 
{ 
  function add() 
  {
      var collectionHolder = $('#thewire_personabundle_recursoaddtype_conocimiento');
      var prototype = collectionHolder.attr('data-prototype');
      form = prototype.replace(/\$\$name\$\$/g, collectionHolder.children().length);
      collectionHolder.append(form);
  }


  $(".record_actions").delegate("a.jslink", "click", function(event){
      event.preventDefault();
      add();
  });
  }); 
   </script>

有效表格时:

if ($request->getMethod() == 'POST') {
    $formularioEditarRecurso->bindRequest($request);
    if ($formularioEditarRecurso->isValid()) {
        $em->persist($recurso);
        $em->flush();
        return $this->redirect($this->generateUrl('AdminPeticionVer', array('id' => $recurso->getPeticion()->getId())));
      }
  }

获取错误:

  

SQLSTATE [HY093]:参数号无效:绑定变量数   与令牌数量不匹配

我想这个错误是发送更多标签

如何防止此错误? 感谢

0 个答案:

没有答案