1

さて、以下に説明する FormType を取得しました。この Form クラスは、フォームの作成と編集の両方に使用します。options 配列の属性を使用して、デフォルトの日付 (以下)from_dateを設定することにしました。これは、デフォルトの日付を設定するのに非常に役立ちます。また、編集フォームの既存の日付を上書きしますが、これはまったく役に立ちません。to_datedata

「常に」値ではなく、実際の「デフォルト」値を設定するにはどうすればよいですか?

<?php

namespace TechPeople\InvoiceBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Security\Core\SecurityContext;


class InvoiceType extends AbstractType
{
    private $user;

    public function __construct(SecurityContext $security_context)
    {
        $this->user = $security_context->getToken()->getUser();
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $lastMonth = new \DateTime();$lastMonth->modify('-1 month');
        $builder
            ->add('month', 'choice', array(
                'data' => $lastMonth->format('F'),
                'choices' => array(
                    "January" => "January",
                    "February" => "February",
                    "March" => "March",
                    "April" => "April",
                    "May" => "May",
                    "June" => "June",
                    "July" => "July",
                    "August" => "August",
                    "September" => "September",
                    "October" => "October",
                    "Novemeber" => "Novemeber",
                    "December" => "December",
                )
            ))
            ->add('year', null, array(
                'data' => $lastMonth->format('Y')
            ))
            ->add('from_date', 'date', array(
                 'label' => 'From',
                 'data' => new \DateTime(),
            ))
            ->add('to_date', 'date', array(
                 'label' => 'To',
                 //'data' => new \DateTime(),
            ))
            ->add('hours')
            ->add('expenses')
            ->add('expense_amount', 'money',
                array(
                    'required' => false,
                ))
            ->add('attachment', 'file',
                array(
                    'path'=>$options['data']->getAttachmentPath(),
                    'required' => false,
                )
            )
        ;
        if($this->user->hasRole('ROLE_ADMIN')){
            $builder->add('vendor');
        }
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'TechPeople\InvoiceBundle\Entity\Invoice'
        ));
    }

    public function getName()
    {
        return 'techpeople_invoicebundle_invoicetype';
    }
}
4

1 に答える 1

4

エンティティ、またはフォームデータとして、コンストラクターで、またはデフォルト値として使用する任意のオブジェクトに設定してください。

class Invoice {

    private $month;
    private $year;
    private $from_date;
    private $to_date;
    //...

    public function __construct()
    {
        $lastMonth = new \DateTime('now - 1 month');
        $this->month = $lastMonth->format('F');
        $this->year = $lastMonth->format('Y');
        $this->from_date = new \DateTime;
        $this->to_date = new \DateTime;
        //...
    }
}

作成フォーム用にこれらの2つのフィールドを設定し、永続化されたエンティティの場合、これらの値はロード時に保存されたデータによって上書きされます。

于 2013-01-14T09:45:35.047 に答える