如果我有一个附加了多个验证器的表单元素(在本例中为3),addErrorMessage当每个唯一验证器失败时,如何使用它来创建自定义错误消息.有没有办法为每个验证器添加自定义消息?
$element = new Zend_Form_Element_Text()...
$element->....
->addValidator(...)
->addValidator(...)
->addValidator(...)
->addErrorMessage()
Run Code Online (Sandbox Code Playgroud) 我看了其他问题 /谷歌搜索了这个.我的问题是,当我提交带有notEmpty验证器的空文本框的表单时,它不会触发错误.
首先,我想看看我是否明白之间的差别notEmpty和setRequired.据我所知,notEmpty如果提交了一个元素并且值为空,验证器会给出错误.也就是说,如果一个条目不存在于POST数据存在(形式),那么它不如果不是元素产生一个错误需要.喜欢它只在元素设置时运行.除非另有说明,否则该setRequired方法将notEmpty在幕后自动添加验证器.这可确保元素的条目必须存在且不能为空.正确?
现在,我尝试在我添加notEmpty验证器的表单中使用此逻辑,如下所示:
$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty(), true);
Run Code Online (Sandbox Code Playgroud)
对于其他文本字段也是如此.如果我在没有输入值的情况下提交表单,我的POST数据如下所示:
(
[txtUsername] =>
[txtPassword] =>
[txtRepeatPassword] =>
)
Run Code Online (Sandbox Code Playgroud)
但是,isValid仍然会计算true并且不会生成错误消息.为什么?notEmpty由于元素在POST数据中有条目,验证器是否应该确定值为空?如果我使用setRequired(true)它,它的工作方式我想要的.我只是想知道,当值为空字符串时,它确定用户名不为空.:-)
提前致谢.
我在SO上读到了这个问题:" 如何在zend framework2中禁用inArray验证器表单 "并试图找到它,但找不到任何方法来分离/删除InArrayValidator.但这InArray只是一个验证者.那么如何从表单元素的验证器列表中删除验证器呢?
我可以得到验证器:
$myElement = $form->getInputFilter()->get('city');
$validatorChain = $cityElement->getValidatorChain();
$validators = $validatorChain->getValidators();
Run Code Online (Sandbox Code Playgroud)
然后可能可以使用验证器取消设置数组元素,我想删除,然后将结果数组传递回Input对象和表单元素.但它真的很脏,肯定不是推荐的方式.
那么如何从表单元素中删除验证器呢?
对于Zend_Form_Element_File,添加Size验证器和使用setMaxFileSize之间有什么区别吗?
$file->addValidator('Size', false, 1000000);
$file->setMaxFileSize(1000000);
Run Code Online (Sandbox Code Playgroud) 我在forms/video.php中有以下代码片段.但我不知道在哪里添加验证消息所需.
$this->addElement('text','name', array(
'label'=>'Name',
'maxlength'=>20,
'class'=>'name',
'required'=>true,
'filters'=>array('StringTrim'),
'decorators'=>array(
'ViewHelper',
'Errors',
array(array('control'=>'HtmlTag'), array('tag'=>'div', 'class'=>'fieldcontrol')),
array('Label', array('tag'=>'div', 'class'=>'name')),
array(array('row'=>'HtmlTag'), array('tag' => 'div', 'class'=>'row')),
)
));
Run Code Online (Sandbox Code Playgroud)
我想把它设置为"请输入你的名字"之类的东西,而不是"价值是必需的而且不能为空".
php zend-framework zend-form zend-validate zend-form-element
如何编辑Button元素(ZF2表单)的按钮内容?我可以设置一个标签,但我想在其中插入一些HTML代码.
$this->add(array(
'type' => 'Button',
'name' => 'submit',
'options' => array(
'label' => 'Modifica',
),
'attributes' => array(
'type' => 'submit',
'class' => 'btn btn-warning'
)
));
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个表单,有两个文件上传元素.它像是
$data_file_one = $this->createElement('file','data_file_one');
$data_file_one->setRequired(true)
->addValidator('Extension', false, 'csv')
->setDestination($filepath);
Run Code Online (Sandbox Code Playgroud)
两者都设置为必需true.我使用相同的表单来发布新帖子和编辑帖子.当它用于编辑时,文件上传不应该是强制性的,必须设置为必需的false.所以,我需要改变
setRequired(true)to setRequired(false)
如果调用编辑操作来加载表单并更改此元素选项,我该怎么办?
提前致谢.
如果用户打开两种相同类型的表单,则会出现csrf错误,
我自己是一个具有机器人心态的多才多艺,多任务,绝对的野兽习惯于打开多个标签并以疯狂的方式做事,csrf检查将我变成了一个正常的人.
关于这个还能做什么?
对不起,忘了提到这是关于zend framework的csrf元素
zend-framework csrf zend-form zend-form-element csrf-protection
当用户输入无效的电子邮件地址时,我无法使Zend_Validate_EmailAddress只显示1条错误消息.代码是
$email = new Zend_Form_Element_Text('email');
$email->setLabel('Email: ')
->addFilter('StringTrim')
->addFilter('StripTags')
->addValidator('EmailAddress',true, array(... error msgs ...))
->addValidator(new Zend_Validate_Db_NoRecordExists(array( ... db + table + col details ... ),true, array(... error msgs ...)))
->setRequired(true);
$this->addElement($email);
Run Code Online (Sandbox Code Playgroud)
当用户输入无效的电子邮件时user@email(如果没有tld),它会显示多个错误,例如
'email' is no valid hostname for email address 'user@email'
'email' does not match the expected structure for a DNS hostname
'email' appears to be a local network name but local network names are not allowed
Run Code Online (Sandbox Code Playgroud)
我无法使用,addErrorMessage('...')因为我需要为无效的电子邮件显示不同的消息,并且电子邮件已存在于数据库中.因此,任何想法如何使EmailAddress验证只返回1错误消息.
我正在使用ViewScripts来装饰我的表单元素.使用无线电元素时,通常可以覆盖分隔符,但在使用ViewScript时会忽略覆盖.
当我使用下面的调用和ViewScript时,无线电元素用'<br />'而不是我指定的空格分隔.如果保留默认装饰器,则覆盖工作.
$this->addElement('radio', 'active', array(
'disableLoadDefaultDecorators' => true,
'decorators' => array(array('ViewScript', array('viewScript' => 'form/multi.phtml'))),
'label' => 'Active',
'required' => true,
'multiOptions' => array('1' => 'Yes', '0' => 'No',),
'value' => '1',
'separator' => ' ',
'filters' => array(),
'validators' => array(),
));
Run Code Online (Sandbox Code Playgroud)
ViewScript:
<div class="field <?php echo strtolower(end(explode('_',$this->element->getType()))) ?><?php if($this->element->hasErrors()): ?> errors<?php endif; ?>" id="field_<?php echo $this->element->getId(); ?>">
<?php if (0 < strlen($this->element->getLabel())): ?>
<?php echo $this->formLabel($this->element->getName(), $this->element->getLabel());?>
<?php endif; ?>
<span class="value"><?php echo $this->{$this->element->helper}(
$this->element->getName(),
$this->element->getValue(),
$this->element->getAttribs(),
$this->element->getMultiOptions() …Run Code Online (Sandbox Code Playgroud) zend-framework zend-form zend-decorators zend-view zend-form-element
我正在使用Zend Framework和Zend_Form来呈现我的表单.但是当我发现很难定制它时,我决定单独打印元素.
问题是,我不知道如何在显示组内打印单个元素.我知道如何打印我的显示组(字段集),但我需要在其中添加一些东西(比如<div class="spacer"></div>取消float:left.
有没有办法只显示没有内容的组,所以我可以自己单独打印它们?
谢谢您的帮助.
在ZF1表单的元素有一个setDescription是被输出作为方法<p>description here</p>鉴于.... ZF2显得那么我的问题是我怎样才能添加说明,形成元素没有这个方法?
这是我的看法:
<div>
<?
$form = $this->form;
$form->prepare();
echo $this->form()->openTag($form);
foreach ($form->getElements() as $el) {
?>
<div class="form_element">
<?=$this->formRow($el);?>
</div>
<?
}
echo $this->partial('system/form/buttons_form_part.phtml', array('form' => $form));
echo $this->form()->closeTag();
?>
</div>
Run Code Online (Sandbox Code Playgroud)