7

私は問題があります。フォームタイプクラスのエンティティにないフィールドを検証する必要があります。以前、私はこのコードを使用しました:

$builder->addValidator(new CallbackValidator(function(FormInterface $form){
    if (!$form['t_and_c']->getData()) {
        $form->addError(new FormError('Please accept the terms and conditions in order to registe'));
    }
}))

しかし、Symfony 2.1以降、メソッドaddValidatorとクラスCallbackValidatorは非推奨になりました。誰かが私が代わりに何を使うべきか知っていますか?

4

3 に答える 3

10

私はこのようにそれをしました:

add('t_and_c', 'checkbox', array(
            'property_path' => false,
            'constraints' => new True(array('message' => 'Please accept the terms and conditions in order to register')),
            'label' => 'I agree'))
于 2013-03-21T09:12:45.953 に答える
2

インターフェイスFormValidatorInterfaceは非推奨になり、Symfony2.3で削除される予定です。

このインターフェイスを使用してカスタムバリデーターを実装した場合は、 FormEvents::POST_BIND(またはその他の*BINDイベント)をリッスンするイベントリスナーで置き換えることができます。CallbackValidatorクラスを使用した場合は、コールバックをに直接渡す必要がありますaddEventListener

https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#deprecations経由

于 2012-07-26T12:13:26.697 に答える
2

バリデーターをイベントサブスクライバーに変更するためのヘルプを探している他の人は(通常のサブスクライバーとは少し異なるため)、次のようにします。

ステップ1

変化する:

$builder->addValidator(new AddNameFieldValidator());

$builder->addEventSubscriber(new AddNameFieldSubscriber());

ステップ2

バリデータークラス(およびすべての名前空間)をサブスクライバークラスに置き換えます。サブスクライバークラスは次のようになります。

// src/Acme/DemoBundle/Form/EventListener/AddNameFieldSubscriber.php
namespace Acme\DemoBundle\Form\EventListener;

use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormError;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class AddNameFieldSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(FormEvents::POST_BIND => 'postBind');
    }

    public function postBind(FormEvent $event)
    {
        $data = $event->getData();
        $form = $event->getForm();

        $form->addError(new FormError('oh poop'))
    }
}

サブスクライバーをサービスファイル(ymlまたはその他)に登録する必要はありません


参照: http ://symfony.com/doc/2.2/cookbook/form/dynamic_form_modification.html#adding-an-event-subscriber-to-a-form-class

于 2013-06-05T09:51:58.637 に答える