【问题标题】:php Zend Framework - Changing a decorator only if it hasn't been changed alreadyphp Zend Framework - 仅在尚未更改的情况下更改装饰器
【发布时间】:2011-09-16 10:45:52
【问题描述】:

我实际上正在寻找一种很好的方法来为我的所有表单元素使用通用装饰器,同时能够非常具体地更改某些元素的一些装饰器。

假设我希望我的所有元素都有新的通用装饰器。我会在我的父通用表单类的addElement 方法中这样做。例如,在 My_Form 类扩展 Zend_Form 中,它会被包含实际元素声明的 My_Form_User 扩展,我会有类似的东西:

public function addElement($element, $name = null, $options = null)
{
    parent::addElement($element, $name, $options);

    if (! is_object($element)) {
        $element = $this -> getElement($name);
    }

    if (is_object($element))
    {
        $element -> clearDecorators();
        $element -> addDecorators($this -> elementDecorators);
    }

    return $this;
}

现在,我对某些表单的某些元素有非常具体的需求。所以我在创建元素时设置了这些装饰器(在My_Form_User 类中)但是,当然,当我使用addElement 将它们添加到表单时,我找不到检查是否有1 个装饰器的方法(@987654328 @ 或 DescriptionLabel...) 已被修改,因此我不会用通用的删除它。

有什么想法吗?谢谢!

【问题讨论】:

    标签: php zend-framework zend-form zend-decorators


    【解决方案1】:

    有点短,但是……

    • getDecorator($name)
    • getDecorators()
    • removeDecorator($name)

    ...也许这已经有所帮助了。

    【讨论】:

    • 实际上,如果我做一个 getDecorator($name) 我总是有一些东西,因为 Zend 默认装饰器被加载了对吗?
    • 如果你想保留或删除装饰器,你应该知道哪些,对吧?那么,如果这些是默认的,那会有什么不同吗?
    • 如果我收回我的例子,在 My_Form 类(不是 My_Form_User)中,我不知道哪些元素有特定的装饰器;这正是我的问题的重点,我想知道的方法:)
    • getDecorators() 应该让您了解每个元素的装饰器。然后你就知道了。那不行吗?
    • 是的,它会给我所有的装饰器,但是在My_Form 中我想设置通用装饰器,并且我只想在装饰器尚未从 Zend 默认的装饰器更改的情况下这样做。也许我在这里遗漏了一些东西,但是没有getDefaultDecorators()getDefaultDecorator($name) 来检查它是否与实际的getDecorator($name) 不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2012-06-23
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    相关资源
    最近更新 更多