2012-08-09 41 views
0

我有我使用的一種形式,數據庫類產品 - 它與這個或類似的3個日期字段:一種形式,它從來都不是有效的 - Symfony2的

/** 
* @ORM\Column(name="`date`", type="date") 
* @Assert\NotBlank() 
* @Assert\Type("\Date") 
*/ 

它也3-4其他只有NotBlank()的字段,一個沒有任何約束,一個字段用於保存產品的類別(類別是數據庫中的另一個類和表)。它看起來像這樣:

/** 
* @ORM\ManyToOne(targetEntity="Categories") 
* @ORM\JoinColumn(name="categories_id", referencedColumnName="id") 
**/ 
private $categories; 

這裏是我的功能:

public function addAction($id, Request $request) 
{ 
    $em = $this->getDoctrine()->getEntityManager(); 
    $products = new Products(); 
    $products_form = $this->createForm(new ProductsType(), $products); 
    $category = $em->getRepository('AcmeMyBundle:Categories')->find($id); 

    if($request->getMethod() == 'POST') 
    { 
     $products_form->bindRequest($request); 

     if($products_form->isValid()) 
     { 
      $products->setDomains($category); 
      $em->persist($products); 
      $em->flush(); 
     } 

在它重定向結束。問題是,即使我在表單中添加了正確的值,它說它是無效的。要添加日期,只需在表單中寫入如此'2012-08-09'的字符串即可。

當我評論

if($products_form->isValid()) 

,一切工作正常。

有什麼建議嗎?請幫忙!

編輯:

下面是產品類:

/** 
* @ORM\Entity 
* @ORM\Table(name="products") 
*/ 
class Products 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @ORM\ManyToOne(targetEntity="Categories") 
* @ORM\JoinColumn(name="categories_id", referencedColumnName="id") 
**/ 
private $categories; 

/** 
* @ORM\Column(name="`date`", type="date") 
* @Assert\NotBlank() 
* @Assert\Type("\Date") 
*/ 
protected $date; 

/** 
* @ORM\Column(name="`from`", type="date") 
* @Assert\NotBlank() 
* @Assert\Type("\Date") 
*/ 
protected $from; 

/** 
* @ORM\Column(name="`to`", type="date") 
* @Assert\NotBlank() 
* @Assert\Type("\Date") 
*/ 
protected $to; 

/** 
* @ORM\Column(type="decimal", scale=2) 
* @Assert\NotBlank() 
*/ 
protected $price; 

/** 
* @ORM\Column(type="string", length=5) 
* @Assert\NotBlank() 
*/ 
protected $currency; 

/** 
* @ORM\Column(type="string", length=50) 
* @Assert\NotBlank() 
*/ 
protected $paymentid; 

/** 
* @ORM\Column(type="string", length=100, nullable=true) 
*/ 
protected $notes; 

在這裏,我創建的形式:

class ProductsType extends AbstractType 
{ 
public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('date', 'date', array(
     'widget' => 'single_text', 
     'format' => 'yyyy-MM-dd')); 

    $builder->add('from', 'date', array(
     'widget' => 'single_text', 
     'format' => 'yyyy-MM-dd')); 

    $builder->add('to', 'date', array(
     'widget' => 'single_text', 
     'format' => 'yyyy-MM-dd')); 

    $builder->add('price', 'text'); 

    $builder->add('currency', 'choice', array(
     'choices' => array(
      'empty_value'=>'--- Choose ---', 'USD'=>'USD', 'HKD'=>'HKD', 'EUR'=>'EUR', 'BGN'=>'BGN'))); 

    $builder->add('paymentid', 'text'); 

    $builder->add('notes', 'text', array(
     'required' => false)); 
} 

public function getName() 
{ 
    return 'payments'; 
} 
+0

發佈表單類。 – gremo 2012-08-09 08:28:32

+0

我發佈了產品類和我創建表格的類:) – Faery 2012-08-09 08:35:29

+1

好吧,我會編輯我的答案然後:) – gremo 2012-08-09 08:38:11

回答

5

我想在你的表格中,確保csrf標記在那裏。

將下面的代碼添加到標籤內部表單小部件的下面。

{{ form_widget(form._token) }} 

希望這可以幫助你。

+0

非常感謝!它現在的作品:) – Faery 2012-08-09 08:54:01

+0

布拉沃! +1忘了關於大壩代幣的事情:) – gremo 2012-08-09 08:55:57

+1

我也忘記了{{form_rest(form)}},它也可以工作 – Faery 2012-08-09 09:02:00

1

不知道這是否是問題,但你有一個錯字:

$productss_form->bindRequest($request); 

應該

$products_form->bindRequest($request); 
+0

恩:(這是一個拼寫錯誤只是在這裏,在代碼中沒關係,我會編輯它這裏。 – Faery 2012-08-09 08:17:41

+1

當您在堆棧溢出中發佈代碼時,將其從您的文件複製並粘貼到此處,不要重新輸入,這樣可以確保您的代碼無誤地發佈 – 2012-08-09 09:24:16

1

沒有看到形式的代碼,我可以說:

  • @Assert\Type("\Date")應該是@Assert\Date
  • 確保data_class選項在ProductsType類settend
+0

如何確保data_class選項在我的ProductsType類中設置: ( – Faery 2012-08-09 08:42:04

+1

此外,檢查奇怪的斷言,它應該是Assert \ Date ... – gremo 2012-08-09 08:46:06

+0

是的,我修正了,但它仍然不工作 – Faery 2012-08-09 08:46:55

相關問題