ZF2 更改扩展 class
ZF2 change extends class
我的问题 的答案是创建我自己的表单视图助手,覆盖 render
函数。虽然这对于使用 forminput
呈现的元素非常有效,但它对继承自 forminput
的元素没有帮助。例如,FormCheckbox
继承自 forminput
而不是 MY forminput
:
<?php
namespace Zend\Form\View\Helper;
//...
class FormCheckbox extends FormInput {
//...
}
在这种情况下,我需要专门为 formcheckbox
创建另一个表单视图助手来扩展我的 forminput
。再次对于我想包括的任何其他视图助手(formdate
、formemail
、formpassword
等)。
是否可以创建单个视图助手并告诉 ZF2 在 ZF2 视图助手对原始视图助手的所有调用中使用它,而不是创建多个视图助手?
即\Zend\Form\View\Helper\FormCheckbox
将扩展 \RPK\Form\View\Helper\FormInput
,这将扩展 \Zend\Form\View\Helper\FormInput
.
我能想到的一个解决方案是重写自动加载器的一部分。
在自动加载函数中,您添加额外的检查以检查请求的 class 是否为 \Zend\Form\View\Helper\FormInput
,如果是,则加载您的自定义 FormInput。
在您自己的 FormInput 中,您没有扩展 Zend FormInput,而是创建了它的一个副本,并修改了需要修改的部分。
除非 ZF2 为其表单助手使用依赖注入,否则这是我能想到的唯一方法(无需更改基础库代码)。
我用的是局部视图。使用 partials,您可以为每个 input-element 定义自己的 html,并且您可以访问 input-element:
的所有属性和消息(例如 error-messages)
在你的部分 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');
我正在使用 composer 安装 ZF2。当作曲家生成我的自动加载函数时,我可以在 composer.json 文件中指定一个自动加载路径:
"autoload": {
"psr-4": {
"Zend\Form\View\Helper\": "vendor/rpk/Rpk/Form/View/Helper"
}
},
这将在我的供应商文件夹中搜索 class,然后再查看 zend 文件夹。
这不允许我扩展 FormInput,而是在它的位置调用我的 FormInput。在我的 FormInput 上调用 extends 会使应用程序进入无限循环,因此我们需要将 FormInput 的内容复制到我的 class 并在那里进行更改。
我的问题 render
函数。虽然这对于使用 forminput
呈现的元素非常有效,但它对继承自 forminput
的元素没有帮助。例如,FormCheckbox
继承自 forminput
而不是 MY forminput
:
<?php
namespace Zend\Form\View\Helper;
//...
class FormCheckbox extends FormInput {
//...
}
在这种情况下,我需要专门为 formcheckbox
创建另一个表单视图助手来扩展我的 forminput
。再次对于我想包括的任何其他视图助手(formdate
、formemail
、formpassword
等)。
是否可以创建单个视图助手并告诉 ZF2 在 ZF2 视图助手对原始视图助手的所有调用中使用它,而不是创建多个视图助手?
即\Zend\Form\View\Helper\FormCheckbox
将扩展 \RPK\Form\View\Helper\FormInput
,这将扩展 \Zend\Form\View\Helper\FormInput
.
我能想到的一个解决方案是重写自动加载器的一部分。
在自动加载函数中,您添加额外的检查以检查请求的 class 是否为 \Zend\Form\View\Helper\FormInput
,如果是,则加载您的自定义 FormInput。
在您自己的 FormInput 中,您没有扩展 Zend FormInput,而是创建了它的一个副本,并修改了需要修改的部分。
除非 ZF2 为其表单助手使用依赖注入,否则这是我能想到的唯一方法(无需更改基础库代码)。
我用的是局部视图。使用 partials,您可以为每个 input-element 定义自己的 html,并且您可以访问 input-element:
的所有属性和消息(例如 error-messages)在你的部分 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');
我正在使用 composer 安装 ZF2。当作曲家生成我的自动加载函数时,我可以在 composer.json 文件中指定一个自动加载路径:
"autoload": {
"psr-4": {
"Zend\Form\View\Helper\": "vendor/rpk/Rpk/Form/View/Helper"
}
},
这将在我的供应商文件夹中搜索 class,然后再查看 zend 文件夹。
这不允许我扩展 FormInput,而是在它的位置调用我的 FormInput。在我的 FormInput 上调用 extends 会使应用程序进入无限循环,因此我们需要将 FormInput 的内容复制到我的 class 并在那里进行更改。