0

エンティティの追加と編集の両方に 1 つのテンプレートを使用できるように、フォーム クラスに EventSubscriber を追加しました。サブスクライバーを追加する前は、フォームは追加または編集のいずれについてもエラーをスローしませんでした。購読者を追加した後、dateAdded フィールドを追加するための条件が満たされている場合、編集時に次のエラーが発生します。

タイプ「\DateTime」、「配列」の引数が必要です

それ以外の場合、EventSubscriber は期待どおりに機能しているように見えます。

購読者

class AddV2FieldsSubscriber implements EventSubscriberInterface {

    private $factory;

    public function __construct(FormFactoryInterface $factory) {
        $this->factory = $factory;
    }

    public static function getSubscribedEvents() {
        return array(FormEvents::PRE_SET_DATA => 'preSetData');
    }

    public function preSetData(DataEvent $event) {
        $data = $event->getData();
        $form = $event->getForm();
        if (null === $data) {
            return;
        }
        // check if the client object is v1
        if (!$data->getId() || $data->getDateAdded()) {
            $date = new \DateTime();
            $form->add($this->factory->createNamed('dateAdded', 'date', $date, array(
                    'widget' => 'single_text',
                    'format' => 'MM/dd/yyyy',
                    'pattern' => '{{ year }}-{{ month }}-{{ day }}',
                    'years' => range(Date('Y'), Date('Y') - 5),
                    'required' => false,
                    'data' => date_create(),))
                    );
            $form->add($this->factory->createNamed('dob', 'dob_age')
                    );
            $form->add($this->factory->createNamed('sex', 'choice', array(
                    'choices' => array('Male' => 'Male', 'Female' => 'Female'),
                    'empty_value' => "Select a gender",
                    'required' => false))
                    );
        }
    }
}

そのエンティティの dateAdded フィールド:

/**
 * @var \DateTime $dateAdded
 *
 * @ORM\Column(name="date_added", type="date", nullable=true)
 */
private $dateAdded;

テンプレート スニペット

    {% if form.dateAdded is defined %}
        {% include 'ManaClientBundle:Client:v2.html.twig' %}
    {% endif %}
4

1 に答える 1

0

繰り返しますが、答えは、関数の 3 番目のパラメーターに注意を払うことcreateNamed()です。この場合、変更する必要がありました

$form->add($this->factory->createNamed('sex', 'choice', array(...

読む

$form->add($this->factory->createNamed('sex', 'choice', null, array(...
于 2012-12-29T17:36:12.837 に答える