如何在Symfony2中验证具有集合的表单?

时间:2014-07-23 15:47:26

标签: validation symfony doctrine-orm

我需要证明我的表格。我的表格有两个集合但我不能有效... 你知道我怎么做到的吗?

CardEntryType:

namespace Dim\RestaurantBundle\Form\Type;
class CardEntryType extends AbstractType
{

  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder->add('cardEntryContent', 'collection', array(
               'type'   => 'text',
               'prototype' => true,
               'allow_add'    => true,
               'allow_delete' => true,
               'by_reference' => false,
               'options'  => array(
                 'required'  => false,
                 'attr'      => array(
                   'class' => 'text',
                   'placeholder' => 'Nom de l\'entrée...',
                   'pattern' => '.{0,55}'),
               ),
             ))

             ->add('cardEntryPrice', 'collection', array(
               'type'   => 'text',
               'allow_add'    => true,
               'prototype' => true,
               'options'  => array(
                 'required'  => false,
                 'attr'      => array(
                   'class' => 'text',
                   'placeholder' => 'Prix de l\'entrée...',
                   'pattern' => '.{0,10}'),
               ),
             ));
  }

  public function getDefaultOptions(array $options)
  {
    return array(
      'data_class' => 'Dim\RestaurantBundle\Entity\TCardEntry',
    );
  }

  public function getName()
  {
    return 'cardEntry';
  }    

}

实体的模型:

namespace Dim\RestaurantBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;


/**
 * TCardEntry
 *
 * @ORM\Table(name="t_card_entry")
 * @ORM\Entity
 */
class TCardEntry
{
    /**
     * @var integer
     *
     * @ORM\Column(name="card_entry_id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $cardEntryId;

    /**
     * @var string
     *
     * @Assert\Length(
     *      min = "0",
     *      max = "55",
     *      minMessage = "Votre nom ne peut faire moins de {{ limit }} caractères.",
     *      maxMessage = "Votre nom ne peut faire plus de  {{ limit }} caractères."
     * )
     *
     * @ORM\Column(name="card_entry_content", type="text", nullable=false)
     */
    private $cardEntryContent;

    /**
     * @var string
     *
     * @Assert\Length(
     *      min = "0",
     *      max = "10",
     *      minMessage = "Votre nom ne peut faire moins de {{ limit }} caractères.",
     *      maxMessage = "Votre nom ne peut faire plus de  {{ limit }} caractères."
     * )
     *
     * @ORM\Column(name="card_entry_price", type="string", length=10, nullable=false)
     */
    private $cardEntryPrice;



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

    /**
     * Set cardEntryContent
     *
     * @param string $cardEntryContent
     * @return TCardEntry
     */
    public function setCardEntryContent($cardEntryContent)
    {
        $this->cardEntryContent = $cardEntryContent;

        return $this;
    }

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

    /**
     * Set cardEntryPrice
     *
     * @param string $cardEntryPrice
     * @return TCardEntry
     */
    public function setCardEntryPrice($cardEntryPrice)
    {
        $this->cardEntryPrice = $cardEntryPrice;

        return $this;
    }

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

我的控制器:

namespace Dim\RestaurantBundle\Controller;

class AdministrationController extends Controller
{
    public function indexAction()
    {
      return $this->render('DimRestaurantBundle:Administration/Home:index.html.twig');
    }

    public function cardEntryAction(Request $request)
    {
      $TCardEntry = new TCardEntry();

      $form = $this->createForm(new CardEntryType(), $TCardEntry);

      if($request->isMethod('POST')) 
      {

        $form->bind($request);
        if($form->isValid()) 
        {

          die('form valid');

        }
      }

      return $this->render('DimRestaurantBundle:Administration/CardEntry:index.html.twig', array('form' => $form->createView()));
    }
}

当我提交表单时,我总是有同样的错误:

“string”,“array”类型的预期参数

我很困惑......你有个主意吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

该错误是Symfony 2.5中的一个错误。

  

bug#11117 [Validator]修复数组表示法   PropertyPath :: append()(jakzal)

更改日志:http://symfony.com/blog/symfony-2-5-1-released

要解决此问题,我已将Symfony 2.5更新为Symfony 2.5.1。