Chr*_*nte 4 php zend-framework zend-form
目前,我的Zend表单上的错误消息在元素下面呈现如下:
<ul class="errors">
<li>A password is required.</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个.我怎样才能做到这样呢:
<div class="errors">
<p>A password is required.</p>
</div>
Run Code Online (Sandbox Code Playgroud)
我试过的事情:
删除并重新声明错误装饰器:
$password->removeDecorator("Errors");
$password->addDecorator("Errors", array("tag" => "div"));
Run Code Online (Sandbox Code Playgroud)
不起作用; 我明白了:
<ul tag="div" class="errors">
<li>A password is required.</li>
</ul>
Run Code Online (Sandbox Code Playgroud)HtmlTag在Errors装饰器周围包裹其他装饰器.所有这一切都是为列表添加样式.例如,我尝试添加<strong></strong>标签,但不是替换列表,标签就会绕过它,产生一个粗体列表.
使用Intercal的PLEASE运算符很好地问:
PLEASE $password->removeDecorator("Errors");
PLEASE $password->addDecorator("Errors", array("tag" => "div"));
Run Code Online (Sandbox Code Playgroud)
好吧,也许我没有尝试过.但是,重点是我想不出别的尝试:)
第一个问题是默认的错误装饰器需要一系列错误来操作; 你可能有几个附加到该元素的验证器.这就是为什么无序列表在这种情况下运行良好的原因.
但是,您所需的输出建议每个元素使用一条消息,因此问题变为:您希望该消息来自何处?是否要指定单个消息而不管验证器生成的消息,或者您是否要从验证器生成的所有错误消息中提取第一条消息(但是,我认为只有一个验证器) ,这就是你怎么知道你只想要一条消息)?
无论哪种情况,我都会看到一个自定义装饰器.在每种情况下,该render()方法都会检查元素上的错误,并且在出现错误时,您"抓取错误消息"并呈现您想要的标记.
在前一种情况下 - 您希望指定单个消息,而不管验证器本身生成的消息 - 您的自定义装饰器可以接受单个选项"消息".
在后一种情况下,您只需获取第一条错误消息.
与往常一样,在编写自定义装饰器时,您可能会将它们放在您自己的伪命名空间中,然后使用该元素注册该命名空间.
或者,我可能误读了你的意图.也许您可以拥有多个<p>标签.在这种情况下,您可以使用标准Errors装饰器,但是您需要它来调用自定义FormErrors视图助手,扩展标准FormErrors视图助手,它会覆盖受保护的成员,如下所示:
protected $_htmlElementEnd = '</p></div>';
protected $_htmlElementStart = '<div%s><p>';
protected $_htmlElementSeparator = '</p><p>';
Run Code Online (Sandbox Code Playgroud)
与往常一样,您可能会将自定义视图助手放入您自己的伪命名空间,并使用视图对象注册该命名空间.
没有完全书写或测试,只是一些想法/想法.希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
1889 次 |
| 最近记录: |