0

私のフォームの 1 つに必須フィールドとそうでないフィールドがあります。たとえば、「名前」は必須ですが、「メモ」は必須ではありません。

class Form_CompanyForm extends Zend_Form{
public function init(){
    // add element: ID textbox
    $ID = $this->createElement('hidden', 'id');
    $this->addElement($ID);

    // add element: name textbox
    $name = $this->createElement('text', 'name');
    $name->setLabel('name:');
    **$name->setRequired(TRUE);**
    $name->setAttrib('size',100);
    $name->setAttrib('maxlength',255);
    $name->addFilters(array(new Zend_Filter_StringTrim()));
    $this->addElement($name);

        // add element: note text area
    $note = $this->createElement('textarea', 'note');
    $note->setLabel('note:');
    **$note->setRequired(FALSE);**
    $note->setAttrib('cols',50);
    $note->setAttrib('rows',4);
    $note->addFilters(array(new Zend_Filter_StringTrim()));     
    $this->addElement($note);       

...

私のコントローラーの 1 つがこのフォームを呼び出し、そのすべてのフィールドを使用します。これは正常に機能しており、名前フィールドの検証が行われています。

しかし...別のコントローラーが同じフォームを使用して、メモを変更するだけです...このために、 removeElement() を使用してフォームから名前を削除します。

public function editcompanynoteAction(){
    $mod = new Model_Company();
    $frm = new Form_CompanyForm();
    $frm->removeElement('name');        
    $frm->setAction('/companyland/editcompany');
    $frm->setMethod('post');
    if($this->getRequest()->isPost()){
        if($frm->isValid($_POST)){

...

フォームは正しく表示されます。予想どおり、メモ フィールドのみが表示されます。

しかし、フォームを保存すると、「名前」フィールドが必要なため、検証は失敗します...

Zend を初めて使用するので、削除された要素でフォームの検証が失敗する理由がわかりません。

removeElement の使用に関する Web 上の例があります... clearValidators() を成功せずに試し、Zend フォームの検証を調べました

コメントには、「$form->isValid() を呼び出す前に、バリデーターを削除する必要があります」と書かれています。

しかし、どのように?

あなたが私に与えることができるどんな助けも大歓迎です。

4

1 に答える 1

0

この行を入れてください

$frm->getElement('name')->setRequired(false);

$frm->removeElement('name');  
于 2012-05-10T17:43:52.033 に答える