ZF2更改扩展了类

时间:2017-01-18 12:50:26

标签: php zend-framework2 override extending-classes

我的问题ZF2 FormInput to show error class on validation fail的答案是创建我自己的表单视图助手,覆盖render函数。虽然这对于使用forminput呈现的元素非常有效,但它对从forminput继承的元素没有帮助。例如,FormCheckbox继承自forminput但未继承forminput

<?php
namespace Zend\Form\View\Helper;
//...
class FormCheckbox extends FormInput {
    //...
}

在这种情况下,我需要为formcheckbox专门创建另一个表单视图助手以扩展MY forminput。对于我想要包含的任何其他视图助手(formdateformemailformpassword等),再次使用。

是否可以创建单个视图助手而不是创建一个视图助手,并告诉ZF2在ZF2视图助手制作时对原始视图助手的所有调用都使用它?

即。 \Zend\Form\View\Helper\FormCheckbox会延长\RPK\Form\View\Helper\FormInput,这会延长\Zend\Form\View\Helper\FormInput

3 个答案:

答案 0 :(得分:0)

我能想到的解决方案是重写自动加载器的一部分。

在自动加载功能中,您需要额外检查以检查所请求的类是否为\Zend\Form\View\Helper\FormInput,如果是这样,则加载自定义FormInput。

在您自己的FormInput中,您不会扩展Zend FormInput,但您可以创建它的副本,并修改需要修改的部分。

除非ZF2对它的表单助手使用依赖注入,否则这是我能想到的唯一方法(不改变基本库代码)。

答案 1 :(得分:0)

我使用的是视图部分。使用partials,您可以为每个input-element定义自己的html,并且您可以访问input-element的所有属性和消息(例如错误消息):

在你的部分phtml中:

<?php
    $options = $element->getOptions();
    $t = $this->t();
    $value = $element->getValue();
    $messages = $element->getMessages();
    $attr = $element->getAttributes();

你可以使用这样的部分:

$this->formRow($form->get('myelement'), null, null, 'mypartial');

答案 2 :(得分:0)

我正在使用composer来安装ZF2。当composer生成我的自动加载功能时,我可以在composer.json文件中指定一个自动加载路径:

"autoload": {
    "psr-4": {
        "Zend\\Form\\View\\Helper\\": "vendor/rpk/Rpk/Form/View/Helper"
    }
},

在查看zend文件夹之前,这将在我的供应商文件夹中搜索该类。

这不允许我扩展FormInput,而是调用我的FormInput代替它。在我的FormInput上调用extends会将应用程序置于无限循环中,因此我们需要将FormInput的内容复制到我的类中并在那里进行更改。