0

それらをオブジェクトとして作成してから、次のようなオプションを割り当てたいと思います。

$name = new Zend\Form\Element\Text('name');
$name->setLabel('Your name:');
$name->setRequired(true); // does not work?
$this->add($name);

そこで「必須」のようなオプションを設定することはどのように可能ですか、バリデーターを設定する方法は?フレームワークは、setRequired()の例外「メソッドが存在しません」をスローします。

PS私は本当に配列スタイルを使いたくありません。1つの配列に大量のコードがあると非常に面倒です。私は次のことを意味します:

$this->addElement('text', 'email', array(
        'label'      => 'Your email address:',
        'required'   => true,
        'filters'    => array('StringTrim'),
        'validators' => array(
            'EmailAddress',
        )
    ));
4

2 に答える 2

2

あなたは一つのことを誤解しました。バリデーターはデフォルトでは要素の一部ではありません。

要素にバリデーター自体が含まれている必要がある場合。要素に次のようなInputProviderInterfaceを実装させる必要があります

use Zend\Form\Element;
use Zend\InputFilter\InputProviderInterface;
class MyElement extends Element implements InputProviderInterface
{
    public function getInputSpecification()
    {
        $spec = array(
            'name' => $this->getName(),
            'required' => true,
            'validators' => array(
                'EmailAddress',
            )
        );

        return $spec;
    }
}

フォームの検証が開始されると、formのInputFilterはフォーム要素からすべてのバリデーターを収集し、最終的なものにマージします。

ただし、ハンドルフォームInputFilterによって動的なフォームバリデーターを追加/削除することもできます。

$form = new \Zend\Form\Form();
$form->add($yourElement);
$filter = $form->getInputFilter();
$filter->remove('email');
$filter->add(array(
    'name' => 'email',
    'required' => true,
    'validators' => array (
        'EmailAddress'
    ),
));
$form->setInputFilter($filter);
$form->setData(array(
    'email' => 'abc',
));
$form->prepare();
echo $form->isValid();
print_r($form->getMessages());
于 2012-12-25T08:26:34.877 に答える
0

Zend form option setRequired trueは、オプションvalidatorsでのみ機能します。このように、この要素に検証ルールを定義する必要があります。

$this->review->addValidators(

array('NotEmpty',true, array( 'messages' => array( 'isEmpty' => "Please enter product Review.") ) )

);
于 2013-02-13T09:09:49.683 に答える