2

フォームで setBelongsTo を使用しようとしていますが、Zend は値を検証せず、そのフィールドを setDefaults しません。Googleで検索しましたが、何も見つかりませんでした。何か案が?

形:

$this->setName('form_tecnicos')
         ->setAttrib('onSubmit',"return validarForm()");



    $elementos['nome'] = new Zend_Form_Element_Text('nome');
    $elementos['nome']->setLabel('Nome')
        ->setRequired(true)
        ->setAttrib('maxlength','150');


        $elementos['telefone0'] = new Zend_Form_Element_Text('0');
        $elementos['telefone0']->setLabel('Telefones')
           ->setRequired(true)
           ->setAttribs(array('mascara'=>'tel','maxlength'=>14))
           ->setBelongsTo('telefones');

        $elementos['telefone1'] = new Zend_Form_Element_Text('1');
        $elementos['telefone1']->setLabel('Telefones')
           ->setRequired(true)
           ->setAttribs(array('mascara'=>'tel','maxlength'=>14))
           ->setBelongsTo('telefones');

$elementos['submit'] = new Zend_Form_Element_Submit('Entrar');
        $elementos['submit']->setLabel('Entrar');

    $this->addElements($elementos);

    $filters = array('StringTrim');
    $this->setElementFilters($filters);

    $this->setElementDecorators(array(
            'viewHelper',
            'Errors',
            array(array('data'=>'HtmlTag'), array('tag' => 'dd')),
            array('Label',array('tag'=>'dt')),
            array(array('row'=>'HtmlTag'),array('tag'=>'div','class'=>'grid_2'))
    ));


    $remover_label = array('submit');

    foreach($remover_label as $elementos)
        $this->$elementos->removeDecorator('label');

コントローラ

$form = new Application_Form_Tecnicos();
   $this->view->form = $form;

   if($this->getRequest()->isPost()):
        $dados = $this->getRequest()->getPost();

        if($form->isValid($dados)):
            //
        else:                   
            $form->setDefaults($dados);
        endif;
   endif;

Print_r($dados)

Array ( [nome] => [telefones] => Array ( [0] => (11) 1111-111 ) [Entrar] => Entrar )

私はそれに立ち往生しています

4

1 に答える 1

2

実際には とは関係のない 2 つの問題がありますsetBelongsTo。簡単な答えだけが必要な場合は、フォームコードの関連部分を次のように変更してください。

$elementos['nome'] = new Zend_Form_Element_Text('nome');
$elementos['nome']->setLabel('Nome')
    ->setRequired(true)
    ->setAttrib('maxlength','150');

$elementos['telefone0'] = new Zend_Form_Element_Text('telefone0');
$elementos['telefone0']->setLabel('Telefones')
    ->setRequired(true)
    ->setAttribs(array('mascara'=>'tel','maxlength'=>14))
    ->setBelongsTo('telefones');

$elementos['telefone1'] = new Zend_Form_Element_Text('telefone1');
$elementos['telefone1']->setLabel('Telefones')
    ->setRequired(true)
    ->setAttribs(array('mascara'=>'tel','maxlength'=>14))
    ->setBelongsTo('telefones');

より長い説明は次のとおりです。

フォーム要素を Zend Form オブジェクトに追加するには、2 つの方法があります。関連するフォーム要素オブジェクトをインスタンス化し、それをフォームに追加できます。

$form->addElement(new Zend_Form_Element_Text('name'));

または、関連するパラメーターを指定して addElement を呼び出し、それを取得してオブジェクトを作成することもできます。

$form->addElement('text', 'name');

最初のアプローチを使用すると、オブジェクトから要素名が取得されます。2 番目を使用する場合は、名前を 2 番目のパラメーターとして渡します。名前は、Zend_Form が要素を格納するために内部的に使用するものであり、送信されたデータがどの要素に関連しているかを知る方法でもあります。

で一度に要素を追加するとaddElements()、配列キー (非数値の場合) が名前として使用されます。したがって、最初の問題は次のとおりです。

$elementos['telefone0'] = new Zend_Form_Element_Text('0');

は名前を として保存しますtelefone0が、実際のフォーム要素は名前を使用します0。そのため、フォームが送信されると、Zend_Form はデータが$_POST['telefone0'].

2番目の問題ははるかに簡単です。フォーム要素の名前は PHP 変数として機能する必要があるため、数字の名前 (電話番号フィールドの 0 と 1 など) を使用することはできません。

上記の作業コードで必要だったのは、2 つの電話要素の名前を のキーと一致するように変更することでした$elemntos。これにより、両方の問題が修正されました。

于 2012-06-30T22:22:59.853 に答える