1

フォームとデータベースに使用するクラス Products があります-これまたは類似の3つの日付フィールドがあります:

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

NotBlank()また、制約のない 1 つと、製品のカテゴリを保存するために使用されるフィールド (カテゴリはデータベース内の別のクラスおよびテーブル)のみを持つ 3 ~ 4 の他のフィールドもあります。次のようになります。

/**
 * @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())

すべて正常に動作します。

助言がありますか?助けてください!

編集:

Products クラスは次のとおりです。

/**
 * @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';
}
4

3 に答える 3

5

あなたのフォームでは、csrfトークンがあることを確認してください。

タグ内のフォーム ウィジェットの下に次のコードを追加します。

{{ form_widget(form._token) }}

これがお役に立てば幸いです。

于 2012-08-09T08:49:36.380 に答える
1

フォームコードを見なくても、私は言うことができます:

  • そう@Assert\Type("\Date")あるべき@Assert\Date
  • data_classオプションがProductsTypeクラスに設定されていることを確認してください
于 2012-08-09T08:37:38.920 に答える
1

これが問題かどうかはわかりませんが、タイプミスがあります:

$productss_form->bindRequest($request);

する必要があります

$products_form->bindRequest($request);
于 2012-08-09T08:15:44.080 に答える