私のフォームの 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() を呼び出す前に、バリデーターを削除する必要があります」と書かれています。
しかし、どのように?
あなたが私に与えることができるどんな助けも大歓迎です。