簡體   English   中英

Zend Framework 2從添加的元素訪問Form類

[英]Zend framework 2 access to Form class from added elements

問題:是否可以從添加的元素訪問Form類?


示例案例:

注意:此示例本身沒有任何意義,但這並不是我要嘗試做的事情:只是為了使事情保持簡單

假設有一個自定義視圖助手,它將一個元素包裝到div中。 就像是:

public function render(ElementInterface $element = NULL) {

   return '<div class="myclass">'.$this->view->formElement($element).'<div>';

}

我想從元素本身中檢索“ myclass”類,並且僅在提交表單后才將其添加到div中。 就像是:

public function render(ElementInterface $element = NULL) {

       $class='default';

       if(isset($_POST['submit'])){
           $class=$element->getOption('wrapper_class');
       }

       return'<div class="'.$class.'">'.$this->view->formElement($element).'<div>';

    }

可行(如果'submit'是提交按鈕的名稱),但是,如果我在同一頁面中有兩個表單,則第二個表單提交將觸發上述條件,並且將應用該類。

解決方法可能是:

class MyForm extends Form {

  public function __construct($name = null){

    parent::__construct($name);

    $this->add([
            'name' => 'myElement',
            'type' => MyCustomElement::class,
            'options' => [
                'triggered_by' => $this->getName(),
                'wrapper_class'=>'myClass',
            ],
        ]);

    $this->add([
            'name' => $this->getName(),
            'type' => 'submit',
            'attributes' => [
                'value' => 'Go',
                'id'    => 'submitbutton',
                'class'=>'btn btn-success',
            ],
        ]);
   }
}

然后: if(isset($_POST[$element->getOption('triggered_by')])){ ... }

但這僅在將custom元素直接添加到表單中時才有效。 如果將其添加到字段集中,則$this->getName()將返回該字段集的名稱。 顯然,該名稱可以作為字符串添加,但是我想避免使用它(typos)。

最佳解決方案是從所有子元素訪問主表單的選項/屬性,但元素不擴展Form(myElement-> extend Element,Form-> extend Fieldset-> extend Element)。

...然后...?

簡單的答案:不,你不能。 元素也可以是字段集的一部分,因此它們不會直接耦合到表單元素。

您可以使用viewhelper采取其他方法。 如: $myHelper::__invoke(Form $form)$myHelper::setForm(Form $form) ,它設置表單。 從該方法中,您可以檢查$form::hasValidated()表單是否存在,因為這告訴我們表單已過帳。 然后從$myHelper::render(ElementInterface $element) ,您可以像在示例中那樣添加一些邏輯來添加wrapper類。 在您的示例中,合並類,以便包裝器不會替換所有表單元素(css)類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM