2

コレクションに新しいバリデーター(inputFilter を使用) を追加したいと考えています。

現在のコードは次のとおりです。

私のコードフォーム:

namespace EventyEvent\Form;

use Zend\Form\Element;
use Zend\Form\Form;
use Zend\InputFilter\InputFilter;
use Zend\Stdlib\Hydrator\ClassMethods as ClassMethodsHydrator;

class EventEditBasicForm extends Form
{

public function __construct(){
    parent::__construct();

    $this   ->setName('event')
            ->setAttribute('method', 'post')
            ->setAttribute("accept-charset", "UTF-8")
            ->setHydrator(new ClassMethodsHydrator(false))
            ->setInputFilter(new InputFilter());

 // date
    $this->add(array(
        'type' => 'Zend\Form\Element\Collection',
        'name' => 'dates',
        'options' => array(
            'label' => "Dates of your event",
            'count' => 1,
            'target_element' => array(
                'type' => 'EventyEvent\Form\Basic\DateFieldset'
            )
        )
    ));
}

マイ コード フィールドセット:

namespace EventyEvent\Form\Basic;

use EventyEvent\Entity\EventDates;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\Stdlib\Hydrator\ClassMethods as ClassMethodsHydrator;

class DateFieldset extends Fieldset implements InputFilterProviderInterface{

public function __construct()
{
    parent::__construct('EventDates');
    $this->setHydrator(new ClassMethodsHydrator(false))
         ->setObject(new EventDates());

    // date start
    $this->add(array(
        'name' => 'datestart',
        'attributes' => array(
            'required' => 'required',
            'type'=>'Text',
        ),
        'options'=>array(
            'label'=>"Date start",
        )
    ));

    // date end
    $this->add(array(
        'name' => 'dateend',
        'attributes' => array(
            'required' => 'required',
            'type'=>'Text',
        ),
        'options'=>array(
            'label'=>"Date end",
        )
    ));



}

/**
 * @return array
 */
public function getInputFilterSpecification()
{
    return array(
        'datestart' => array(
            'required' => true,
            'validators' => array(
                array(
                    'name' => 'Date',
                    'options' => array(
                        'format' => 'd F Y - H:i'
                    ),
                ),
            ),
        ),
        'dateend' => array(
            'required' => true,
            'validators' => array(
                array(
                    'name' => 'Date',
                    'options' => array(
                        'format' => 'd F Y - H:i'
                    ),
                ),
            ),
        ),
    );
}
}

バリデーターの日付をコントローラーで検証する前に追加したいのですが、できますか? ヒント、修正、提案はありますか?

4

1 に答える 1