0

pear ベースのフォームを zend フォームにプロテクトする際に問題が発生することはほとんどありませんでした。

必要な要素はほとんどありません:

  • 基本要素
  • グループ
  • グループ要素
  • セクション
  • 私は以前、Pear でフォームをレンダリングするためにテンプレートを使用していました。基本要素のコンポーネントごとに css クラスを指定する必要があるため、明らかに既存の zend デコレーターを使用することはできません。問題を確認するには、これをレンダリングする必要があります。これは、基本要素のテンプレートです。

    <li class = "{position_in_the_form} {error}">
      <label class="{label_class}"> {label} 
        [<span class="required_class"> * </span>]
      </label>
      <div> {element_content} </div>
      [<p class = "{error_class}"> {error_message} </p>]
    </li>
    

    ご覧のとおり、フォーム内の位置、ラベルのクラス、必要なセクションのクラス、エラーのクラスなど、指定できる動的なものがたくさんあります。また、これをiniファイルから指定できるようにしたいと考えています。カスタムフィールドではなく、iniから基本的なメタを設定できます。

    基本的なデコレータを使用できない理由の 1 つは、要素または sub_form にエラーがある場合、"li" クラスに "error" を含める必要があるためです。エラー デコレータでこれが可能かどうかはわかりません。 . (間違っていたら訂正してください)

    また、グループにはエラーを処理するものが必要です。コア グループはエラーを処理しないため、sub_form をサブクラス化する必要があります。しかし、どうすればiniファイルにサブフォームを作成できますか?iniからサブフォームにパラメータを提供する方法がわかりません。

    ここでの主なアイデアは、要素の視覚的および論理的なグループをフォームに含めることができるようにすることです。たとえば、フルネーム、ミドルネームなどの「名前」グループが必要です。これは、この「名前」グループのグローバルバリデーターも意味します。もう1つのことは、これらのグループを配置できるようにしたいということです:左半分、右半分、いっぱい 私はこれのためにcssを準備し、ナシで作業しました。

    したがって、私が必要としているのは、コードと ini 構成がほとんどない単純なソリューションです。残念ながら、私はあまりにも複雑なことに行き詰まったと思うので、誰かが単純なアーキテクチャについて何か考えを持っているなら、それは素晴らしいことです!

    よろしくお願いします、ベスト、ボリス

    4

    1 に答える 1

    0

    複雑な装飾が必要な場合は、ViewScript Zend_Form_Element_Decoratorを使用することをお勧めします。

    $element->setDecorators(array(
            array('ViewScript', array('viewScript' => 'path/to/your/views/element.phtml')),
    ));
    

    そして、path/to/your/views/element.phtml多かれ少なかれ次のようなもの

    <li class="<?php echo $this->element->getAttrib('position_in_the_form') ?> <?php echo $this->element->hasErrors() ? 'error' : '' ?>">
      <label class="<?php echo $this->element->getAttrib('label_class') ?>"> 
            <?php echo $this->formLabel($this->element->getName(),
                           $this->element->getLabel()) ?>
        <? if ( $this->element->isRequired() ) { ?>
            [<span class="required_class"> * </span>]
        <? } ?>
      </label>
      <div> <?php echo $this->{$this->element->helper}(
          $this->element->getName(),
          $this->element->getValue(),
          $this->element->getAttribs()
      ) ?> </div>
        <? if ( $this->element->hasErrors() ) { ?>
            [<p class="<?php echo $this->element->getAttrib('error_class') ?>"> <?php echo $this->formErrors($this->element->getMessages()) ?> </p>]
        <? } ?>
    </li>
    

    これはコードのドラフト スニペットにすぎませんが、目的の方向に導くはずです。

    よろしく

    于 2010-10-04T12:11:28.613 に答える