首页 > 后端开发 > php教程 > PHP主|设置zend_form_element的自定义错误消息

PHP主|设置zend_form_element的自定义错误消息

William Shakespeare
发布: 2025-02-25 18:13:08
原创
634 人浏览过

PHP主|设置zend_form_element的自定义错误消息

在本文中,我将展示解决一个常见问题的解决方案,该问题是开发人员必须创建基于Zend Framework的非英语网站或应用程序时出现的。我们如何标记zend_form的字段 哪个是无效的zend_form_element,显示一条或多个自定义错误消息?问题主要是由zend_form_element类的本机反直觉方法引起的,我将在更多详细信息中解释。 (请注意,此处讨论的问题和解决方案对于Zend Framework版本1.12及以下。)

钥匙要点

  • >基于Zend Framework创建非英语网站或应用程序时,开发人员经常在标记Zend_form的字段(是Zend_form_element)中遇到的努力,为无效和显示自定义错误消息。这主要是由于zend_form_element类的本机反直觉方法。
  • >由美国公司Zend拥有的Zend Framework的默认行为是为用户输入破坏的每个验证器以英语显示错误消息。开发人员可以转换框架的每个错误消息,也可以在一个或多个消息中解释输入无效,并显示建议以插入可接受的值。后一种选择不那么复杂,尤其是对于中小型项目。
  • >解决此问题的解决方案在于形式(init(init()方法)内部的字段和seterRormessages()方法的使用与Zend框架验证器的属性,称为BreakChainonFailure()。此属性允许验证过程在第一个失败条件下停止。这种方法允许该表单在无效输入时仅显示自定义消息。

开发一个示例

假设您有一个具有不同字段的表格,并且仅考虑其中一个字段,例如用于让用户输入他的名称的文本输入字段。您可以使用的验证器是不同的,但是为了示例,我们将限制名称的长度,并且仅允许字母字符和空格。说Zend Framework语言,我们将分别使用Zend_validate_stringlength和zend_validate_alpha类。 您可能已经知道,Zend Framework归American Company Zend拥有,因此它显示的所有消息都是英文。框架的默认行为是为用户输入破坏的每个验证器显示一个或多个错误消息。因此,对于那些正在构建非英语网站的人,有两个选项可以让所有用户可读取消息:翻译框架的每个错误消息,或在一条或多个消息中解释输入是无效的,并显示建议的建议可以插入公认的价值。第一个选择是过于复杂的,尤其是对于中小型项目,因此我将展示如何使用第二种选项。 为了简化它,我们将设置一个自定义消息:“输入是无效的。该值必须只有字母字符和空格,其长度必须在3到50个字符之间。”

代码

我将展示我们将在文章中使用的代码。首先,这是包含名称的输入字段和检查数据所需的验证器的表单。
<span><span><?php
</span></span><span><span>class Application_Form_User extends Zend_Form
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>        <span>// create the field
</span></span><span>        <span>$element = new Zend_Form_Element_Text("name");
</span></span><span>        <span>$element->setLabel("Name");
</span></span><span>
</span><span>        <span>// set the validators
</span></span><span>        <span>$element->setValidators(array(
</span></span><span>            <span>new Zend_Validate_Alpha(true),
</span></span><span>            <span>new Zend_Validate_StringLength(
</span></span><span>                <span>array("min" => 3, "max" => 50))
</span></span><span>        <span>));
</span></span><span>        <span>$element->setRequired();
</span></span><span>
</span><span>        <span>// add the element to the form
</span></span><span>        <span>$this->addElement($element);
</span></span><span>
</span><span>        <span>// add a submit button
</span></span><span>        <span>$element = new Zend_Form_Element_Submit("submit");
</span></span><span>        <span>$element->setLabel("Submit");
</span></span><span>        <span>$this->addElement($element);
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
登录后复制
登录后复制
登录后复制
在控制器中,我们将检查该字段是否有效并采取相应行动。通常,您不会使用indexController,并且可能会在特定控制器中使用此验证。无论如何,为了简化示例,我将使用它。
<span><span><?php
</span></span><span><span>class IndexController extends Zend_Controller_Action
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function indexAction() {
</span></span><span>        <span>$form = new Application_Form_User();
</span></span><span>
</span><span>        <span>if ($this->getRequest()->isPost() &&
</span></span><span>            <span>$form->isValid($this->getRequest()->getPost())) {
</span></span><span>            <span>$this->view->message = "Valid input";
</span></span><span>        <span>}
</span></span><span>        <span>else {
</span></span><span>            <span>$this->view->form = $form;
</span></span><span>        <span>}
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
登录后复制
登录后复制
所使用的视图非常简单;它仅显示消息和表单。
<span><span><?php
</span></span><span><span>if (isset($this->message)) {
</span></span><span>    <span>echo $this->message;
</span></span><span><span>}
</span></span><span><span>if (isset($this->form)) {
</span></span><span>    <span>echo $this->form;
</span></span><span><span>}</span></span>
登录后复制
登录后复制
上面的源代码,没有任何CSS规则,将其呈现:

PHP主|设置zend_form_element的自定义错误消息

此外,如果您在名称字段中插入无效的值“ 88”,您将看到消息:

PHP主|设置zend_form_element的自定义错误消息

分析框架的方法

一个很好的问题是,是否已经可以面对这种情况了。答案是几乎 。我的意思是有一些方法,但它们并不总是按照您的期望(至少如我所期望的)工作。管理错误消息的方法是:
  • > setErrors(数组$消息)
  • > seterRormessages(数组$消息)
方法setErrors()只有一个参数,它是一个数组,并将其元素用作无效输入时显示的消息。其使用的一个例子是:
<span><span><?php
</span></span><span><span>class Application_Form_User extends Zend_Form
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>        <span>// create the field
</span></span><span>        <span>$element = new Zend_Form_Element_Text("name");
</span></span><span>        <span>$element->setLabel("Name");
</span></span><span>
</span><span>        <span>// set the validators
</span></span><span>        <span>$element->setValidators(array(
</span></span><span>            <span>new Zend_Validate_Alpha(true),
</span></span><span>            <span>new Zend_Validate_StringLength(
</span></span><span>                <span>array("min" => 3, "max" => 50))
</span></span><span>        <span>));
</span></span><span>        <span>$element->setRequired();
</span></span><span>
</span><span>        <span>// add the element to the form
</span></span><span>        <span>$this->addElement($element);
</span></span><span>
</span><span>        <span>// add a submit button
</span></span><span>        <span>$element = new Zend_Form_Element_Submit("submit");
</span></span><span>        <span>$element->setLabel("Submit");
</span></span><span>        <span>$this->addElement($element);
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
登录后复制
登录后复制
登录后复制
此方法以及显示给定的字符串也将字段标记为无效。 它可以在应用程序逻辑中两次使用,但是在两者中,它具有对我们的目标无用的行为。第一个是在创建表单元素(init(init()方法)期间。在这种情况下,在加载表单后以及用户插入任何数据之前显示消息。非常不愉快。在这种情况下,代码的相关部分类似:
<span><span><?php
</span></span><span><span>class IndexController extends Zend_Controller_Action
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function indexAction() {
</span></span><span>        <span>$form = new Application_Form_User();
</span></span><span>
</span><span>        <span>if ($this->getRequest()->isPost() &&
</span></span><span>            <span>$form->isValid($this->getRequest()->getPost())) {
</span></span><span>            <span>$this->view->message = "Valid input";
</span></span><span>        <span>}
</span></span><span>        <span>else {
</span></span><span>            <span>$this->view->form = $form;
</span></span><span>        <span>}
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
登录后复制
登录后复制
在控制器内的常用数据验证期间发送信息后,第二次发生。发生的事情是,当发生错误时,自定义消息将附加到默认消息上。在这种情况下,索引控制器的索引()以这种方式更改:
<span><span><?php
</span></span><span><span>if (isset($this->message)) {
</span></span><span>    <span>echo $this->message;
</span></span><span><span>}
</span></span><span><span>if (isset($this->form)) {
</span></span><span>    <span>echo $this->form;
</span></span><span><span>}</span></span>
登录后复制
登录后复制
就像seterrors()一样,seterRormessages()方法作为参数作为一个字符串数组,如果输入无效,将显示给用户。其使用的一个例子是:
<span><span><?php
</span></span><span><span>// set the custom message in the case of an error
</span></span><span><span>$element->setErrors(array("The input is invalid. The value must have only alphabetic characters and spaces and its length must be between 3 and 50 characters."));</span></span>
登录后复制
这条代码行仍然无法解决问题Beucase,它将显示每个不满意的条件都会显示相同的错误消息,或者将没有效果。如果在init()方法中使用所示的行,以setErrors()显示的方式相同的方式,则在错误的情况下,将显示自定义消息的数量与用户输入违反的条件数量一样多。如果在控制器内的通常数据验证期间插入该行,则以前面的解释方式,将没有效果。这意味着不会显示自定义消息,并且框架将仅显示默认消息。

发现解决方案

现在,关键是要理解>> 为了插入自定义消息,以便用户可以进行比较和有关接受哪些值的建议。毫无疑问,何时发生在表单内(init(init()方法)内部的字段以及如何归结为seterRormessages()方法的结合以及使用Zend Framework的属性,称为BreakChainonFailure() 。后者允许我们在第一个失败条件下停止验证过程。如果我们设置了五个验证器,但第一个验证器失败,则不会使用其他四个。 要利用此属性利用最少数量的代码行,我将在开始时说明的代码。我将添加到INIT()方法中使用SeterRormess()方法的代码行,并利用SetValidators()接受的可能的输入配置之一,该配置期望有一系列数组。主一个中包含的数组最多可以具有三个参数,其中包括:
  1. >字符串(强制性)以将验证器指定为用户。
  2. >布尔值(默认情况下,其值为false),以指定框架是否必须在第一个失败时打破验证。因此,此参数设置了属性breakchainonfailure的价值,这将帮助我们实现目标。
  3. 每个选择的验证器
  4. >的选项数组(默认情况下,默认为空数组)都不同
  5. 使用要使用的每个验证器所使用的第二个参数是必不可少的。 根据我们到目前为止所看到的,由此产生的代码是:
<span><span><?php
</span></span><span><span>class Application_Form_User extends Zend_Form
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>        <span>// create the field
</span></span><span>        <span>$element = new Zend_Form_Element_Text("name");
</span></span><span>        <span>$element->setLabel("Name");
</span></span><span>
</span><span>        <span>// set the validators
</span></span><span>        <span>$element->setValidators(array(
</span></span><span>            <span>new Zend_Validate_Alpha(true),
</span></span><span>            <span>new Zend_Validate_StringLength(
</span></span><span>                <span>array("min" => 3, "max" => 50))
</span></span><span>        <span>));
</span></span><span>        <span>$element->setRequired();
</span></span><span>
</span><span>        <span>// add the element to the form
</span></span><span>        <span>$this->addElement($element);
</span></span><span>
</span><span>        <span>// add a submit button
</span></span><span>        <span>$element = new Zend_Form_Element_Submit("submit");
</span></span><span>        <span>$element->setLabel("Submit");
</span></span><span>        <span>$this->addElement($element);
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
登录后复制
登录后复制
登录后复制
结论

使用上面的代码,该表格仅在无效输入时仅显示自定义消息……正是我们想要的!如果您需要使用更多消息,例如在几个阶段的建议中,只需在用于SeterRormessages()方法的数组中添加更多字符串即可。 通过fotolia

图像 在设置Zend表单元素的自定义错误消息时,经常询问的问题(常见问题解答) >如何在zend中自定义特定表单元素的错误消息?

>自定义Zend中特定表单元素的错误消息非常简单。您可以使用setMessage()方法为特定验证器设置自定义错误消息。例如,如果您有一个名为“电子邮件”的表单元素,并且要为其设置自定义错误消息,则可以按以下方式进行:

$ email = new zend_form_element_text('email''); $ email--> setLabel('电子邮件地址')

- > addValidator('nocempty',true)
> - > addValidator('emailAddress');
$ email--> getValidator('nocementy') - > setMessage('请输入您的电子邮件地址');
在本示例中,setMessage()方法用于为“电子邮件”表单元素的“ notempty”验证器设置自定义错误消息。 zend?

>如果要在zend中为form元素设置多个自定义错误消息,则可以使用setMessages()方法。此方法接受错误消息数组。这是一个示例:

$ email = new zend_form_element_text('email');

$ email--> setlabel('email emeldlobel('email dorkation')

- > - > addvalidator('notempty',true)

- > addValidator('emailAddress');

$ email--> getValidator('notempty') - > setMessages(array(
zend_end_validate_notempty) :无效=>'请输入有效的电子邮件地址'
));
在此示例中,setMessages()方法用于为“电子邮件”表单元素的“无empppy”验证器设置多个自定义错误消息。

>当表单在zend中失败验证时如何显示自定义错误消息?

>当表单在zend中失败验证时,您可以使用adderror()方法显示自定义错误消息。此方法添加了一个错误消息,当表单失败验证时将显示。以下是一个示例:

$ form = new zend_form();
$ form-> addElement('text','email',array(
>'valiverators'=> array('notempty','options'=> array('message'=>'需要电子邮件')),
array('valiverator'=>> 'emailAddress','options'=> array('消息'=>'无效的电子邮件地址')

));
> if(!$ form- form-> isvalid($ _ post)){
$ form-> adderror('提交中有错误。请更正它们,然后重试。'); }
在此示例中, adderror()方法用于添加一个自定义错误消息,该消息将在表单失败验证时将显示。
>
>我如何更改zend中的默认错误消息?

>您可以更改默认值通过使用setMessage()方法,在zend中的错误消息。此方法允许您为特定验证器设置自定义错误消息。这是一个示例:

$ email = new zend_form_element_text('email');

$ email--> setlabel('email emeldlobel('email dorkation')
- > - > addvalidator('notempty',true)
- > addValidator('emailAddress');
$ email--> getValidator('notempty') - > setMessage('请输入您的电子邮件地址');
> $ emagevalidator('emailAddress'') - > setMessage('请输入有效的电子邮件地址');在本示例中,setMessage()方法用于更改默认错误消息的“ notempty”和“ emailAddress”'电子邮件'表单元素的验证器。

如何为zend element中需要的表单元素设置自定义错误消息?在Zend中需要,您可以使用SetRequired()和AdderRormessage()方法为其设置自定义错误消息。这是一个示例:

$ email = new zend_form_element_text('email');

$ email--> setLabel('email emeldlis'>> setRequired(true)

> adderRormessage ('需要电子邮件');在本示例中,setRequired()方法用于使'电子邮件'表单元素需要,并且AdderRormessage()方法用于为其设置自定义错误消息。

>

以上是PHP主|设置zend_form_element的自定义错误消息的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板