FormButton 视图助手将自动转义按钮 HTML 内容,正如 @Sam 正确提到的那样。
避免这种情况的唯一方法是使用自定义表单按钮视图助手。而不是删除转义功能(因为按钮文本内容仍应被转义);您可以扩展视图助手并添加一个附加选项以允许您呈现 html(我假设这是一个引导图标)。
例如
use Zend\Form\View\Helper\FormButton as ZendFormButton;
class FormButton extends ZendFormButton
{
public function render(ElementInterface $element, $buttonContent = null)
{
$content = (isset($buttonContent)) ? $buttonContent : $element->getLabel();
$icon = isset($element->getOption('icon')) ? $element->getOption('icon') : '';
$escape = $this->getEscapeHtmlHelper();
return $this->openTag($element) . $icon . $escape($content) . $this->closeTag();
}
}
然后在服务管理器中使用按钮视图助手的默认注册名称('form_button')创建一个“可调用”配置条目。这会
那么意味着我们的视图助手将被使用而不是默认的Zend\Form\View\Helper\FormButton。
// Module.php
public function getViewHelperConfig()
{
return array(
'invokables' => array(
'form_button' => 'MyModule\Form\View\Helper\FormButton',
)
);
}
最后,更改按钮元素规范以添加新的“图标”选项
$this->add(array(
'type' => 'Button',
'name' => 'submit',
'options' => array(
'label' => 'Modifica',
'icon' => '<i class="icon icon-foo">',
),
'attributes' => array(
'type' => 'submit',
'class' => 'btn btn-warning'
)
));
其他几点
- 如果您使用按钮的翻译,那么上面的代码将删除该功能;这可以很容易地再次添加(只需查看按钮视图助手)。我删除了它以使示例更清晰
- 您还可以扩展它以向元素添加任意数量的其他选项(可能是按钮文本之前或之后的图标位置)。视图助手只需要读取此选项并输出正确的 HTML。