zend-framework - 如何设置 Zend 表单元素的顺序并避免重复

标签 zend-framework zend-form

在 Zend Form 中,如果两个元素具有相同的顺序,那么 Zend 将完全忽略第二个元素(而不是将其显示在第一个元素下)。以下面的代码为例。请注意 CityZip Code元素具有相同的顺序 4

    $address = new Zend_Form_Element_Textarea('address');
    $address->setLabel('Address')
            ->setAttrib('cols', 20)
            ->setAttrib('rows', 2)
            ->setOrder(3)
            ;

    $city = new Zend_Form_Element_Text('city');
    $city->setLabel('City')
         ->setOrder(4)
          ;

    $postal = new Zend_Form_Element_Text('postal');
    $postal->setLabel('Zip Code')
           ->setOrder(4);

当此表单呈现时,Zip Code元素无处可寻。

如果我想动态地设置像按钮这样的元素,但告诉它在表单的末尾呈现,我将如何做到这一点而不遇到两个元素具有相同顺序的问题?
public function addSubmitButton($label = "Submit", $order = null)
{
    $form_name = $this->getName();

    // Convert Label to a lowercase no spaces handle
    $handle = strtolower(str_replace(" ","_",$label));

    $submit = new Zend_Form_Element_Submit($handle);
    $submit->setLabel($label)
           ->setAttrib('id', $form_name . "_" . $handle)
            ;

    /////////    Set the button order to be at the end of the form   /////////
    $submit->setOrder(??????);


    $this->addElement($submit);

}

最佳答案

如果您真的需要使用 setOrder() 方法,我会使用订单号 10、20、30、40,...这样可以很容易地在已经设置的元素之间添加元素。

此外,为了避免使用订单号两次,您可以使用一个数组,在其中存储从 1 到 X 的所有数字。每当您设置一个订单号时,您都通过名为 getOrderNumberFromArray() 的方法设置它,该方法返回下一个数组中仍然可用的更高或更低的阶数并取消设置此数组元素。

或者,甚至更好的是,您可以在新元素之前对想要拥有的元素执行 getOrder(),然后将此订单号增加 X,然后遍历现有表单元素并检查订单号是否不存在然而。

或者,您可以在要在新元素之前和之后显示的元素上使用 getOrder(),并确保您不会对新元素使用相同的订单号。

关于zend-framework - 如何设置 Zend 表单元素的顺序并避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425296/

相关文章:

zend-framework - 如何在 Zend_Form 文件元素上使用 ViewScripts?

php - 在 Zend 中创建表单 View

unit-testing - Zend 框架 : How to start PHPUnit testing Forms?

php - 在 URL 中发送参数的最佳和安全方式

php - 我如何覆盖 php ://input when doing unit tests

php - 我必须在 Zend Framework 中使用 .ini 配置吗?

html - Zend HTML5 表单元素类型

zend-framework - 将变量从 Zend Controller 传递到 zend 表单

php - 选择选项中的 zend 表单自定义属性?

zend-framework - Zend 表单 : Checkbox element displays as hidden field?