钥匙要点
- >基于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></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><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></span>上面的源代码,没有任何CSS规则,将其呈现:
分析框架的方法
一个很好的问题是,是否已经可以面对这种情况了。答案是几乎 。我的意思是有一些方法,但它们并不总是按照您的期望(至少如我所期望的)工作。管理错误消息的方法是:- > setErrors(数组$消息)
- > seterRormessages(数组$消息)
<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></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><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></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></span>这条代码行仍然无法解决问题Beucase,它将显示每个不满意的条件都会显示相同的错误消息,或者将没有效果。如果在init()方法中使用所示的行,以setErrors()显示的方式相同的方式,则在错误的情况下,将显示自定义消息的数量与用户输入违反的条件数量一样多。如果在控制器内的通常数据验证期间插入该行,则以前面的解释方式,将没有效果。这意味着不会显示自定义消息,并且框架将仅显示默认消息。
发现解决方案
现在,关键是要理解和>> 为了插入自定义消息,以便用户可以进行比较和有关接受哪些值的建议。毫无疑问,何时发生在表单内(init(init()方法)内部的字段以及如何归结为seterRormessages()方法的结合以及使用Zend Framework的属性,称为BreakChainonFailure() 。后者允许我们在第一个失败条件下停止验证过程。如果我们设置了五个验证器,但第一个验证器失败,则不会使用其他四个。 要利用此属性利用最少数量的代码行,我将在开始时说明的代码。我将添加到INIT()方法中使用SeterRormess()方法的代码行,并利用SetValidators()接受的可能的输入配置之一,该配置期望有一系列数组。主一个中包含的数组最多可以具有三个参数,其中包括:- >字符串(强制性)以将验证器指定为用户。
- >布尔值(默认情况下,其值为false),以指定框架是否必须在第一个失败时打破验证。因此,此参数设置了属性breakchainonfailure的价值,这将帮助我们实现目标。 每个选择的验证器
- >的选项数组(默认情况下,默认为空数组)都不同 使用要使用的每个验证器所使用的第二个参数是必不可少的。 根据我们到目前为止所看到的,由此产生的代码是:
<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></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');
- > - > 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(
array('valiverator'=>> 'emailAddress','options'=> array('消息'=>'无效的电子邮件地址')
)
));
> if(!$ form- form-> isvalid($ _ post)){
$ form-> adderror('提交中有错误。请更正它们,然后重试。');
在此示例中, adderror()方法用于添加一个自定义错误消息,该消息将在表单失败验证时将显示。
>
>我如何更改zend中的默认错误消息?
$ 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');
> adderRormessage ('需要电子邮件');在本示例中,setRequired()方法用于使'电子邮件'表单元素需要,并且AdderRormessage()方法用于为其设置自定义错误消息。
>以上是PHP主|设置zend_form_element的自定义错误消息的详细内容。更多信息请关注PHP中文网其他相关文章!

在PHP中,可以使用session_status()或session_id()来检查会话是否已启动。1)使用session_status()函数,如果返回PHP_SESSION_ACTIVE,则会话已启动。2)使用session_id()函数,如果返回非空字符串,则会话已启动。这两种方法都能有效地检查会话状态,选择使用哪种方法取决于PHP版本和个人偏好。

sessionsarevitalinwebapplications,尤其是在commercePlatform之前。

在PHP中管理并发会话访问可以通过以下方法:1.使用数据库存储会话数据,2.采用Redis或Memcached,3.实施会话锁定策略。这些方法有助于确保数据一致性和提高并发性能。

PHPsessionshaveseverallimitations:1)Storageconstraintscanleadtoperformanceissues;2)Securityvulnerabilitieslikesessionfixationattacksexist;3)Scalabilityischallengingduetoserver-specificstorage;4)Sessionexpirationmanagementcanbeproblematic;5)Datapersis

负载均衡会影响会话管理,但可以通过会话复制、会话粘性和集中式会话存储解决。1.会话复制在服务器间复制会话数据。2.会话粘性将用户请求定向到同一服务器。3.集中式会话存储使用独立服务器如Redis存储会话数据,确保数据共享。

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

PHP会话的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。1.Cookies通过在客户端存储数据来管理会话,简单但安全性低。2.Token-basedAuthentication使用令牌验证用户,安全性高但需额外逻辑。3.Database-basedSessions将数据存储在数据库中,扩展性好但可能影响性能。4.Redis/Memcached使用分布式缓存提高性能和扩展性,但需额外配

Sessionhijacking是指攻击者通过获取用户的sessionID来冒充用户。防范方法包括:1)使用HTTPS加密通信;2)验证sessionID的来源;3)使用安全的sessionID生成算法;4)定期更新sessionID。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。