我有以下代码为用户的电子邮件地址生成输入字段
$email = new Zend_Form_Element_Text('email');
$email->setLabel('Email:')
->addFilters(array('StringTrim', 'StripTags'))
->addValidator('EmailAddress')
->addValidator(new Zend_Validate_Db_NoRecordExists(
array(
'adapter'=>Zend_Registry::get('user_db'),
'field'=>'email',
'table'=>'tbl_user'
)))
->setRequired(true)
->setDecorators(array(
array('Label', array('escape'=>false, 'placement'=>'append')),
array('ViewHelper'),
array('Errors'),
array('Description',array('escape'=>false,'tag'=>'div')),
array('HtmlTag', array('tag' => 'div')),
));
$this->addElement($email);
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如果用户为电子邮件输入无效的主机名,则会产生3个错误.假设用户输入'admin @ l'作为电子邮件地址,错误将是
*'l'没有电子邮件地址的有效主机名'admin @ l'
*'l'与DNS主机名
*' 的预期结构不匹配l'似乎是本地网络名称,但不允许使用本地网络名称
我只是希望它只提供一个自定义错误而不是所有这些.如果我通过addErrorMessage方法设置错误消息"无效的电子邮件地址",它将再次针对db_validation生成相同的消息.
我有一种形式,我有很多元素.我在许多地方使用表格.我有一个元素,file那就是:
$file= new Zend_Form_Element_File('merchantLogo');
$file->setDestination("application_data/merchant/logo/original/");
$file->addValidator('Count', false, 1);
$file->addValidator('Extension', false, 'jpg,png,gif,jpeg');
$file->setDecorators(array('ViewHelper','Errors'));
Run Code Online (Sandbox Code Playgroud)
现在,我想问一下,我怎样才能取消这种形式的任何元素.我想要这个,因为虽然在我的一个动作上我没有使用这个元素,但是这个元素正在创造问题.那么如何取消任何元素呢?
我创建了一个扩展zend表单的user_form类,它有4个元素用户名,密码,csrf的哈希值和最后一个提交按钮.
创建user_form的对象呈现所有这四个元素.
在控制器操作中验证登录后,我检查失败尝试,并在一些修复失败尝试次数后,我想在提交按钮之前添加zend captch.
我添加了captcha元素,并在提交后按钮后附加.
如何在特定位置添加zend元素?或者如何在提交按钮之前添加它?
还让我知道我的方式是正确的吗?等待你的回复.谢谢...
我正在尝试将自己的自定义错误消息设置到我的Captcha上,但由于某种原因它会回显两次.
这是我的验证码:
$captcha = new Zend_Form_Element_Captcha(
'captcha', // This is the name of the input field
array('captcha' => array(
// First the type...
'captcha' => 'Image',
// Length of the word...
'wordLen' => 6,
// Captcha timeout, 5 mins
'timeout' => 300,
// What font to use...
'font' => 'images/captcha/font/arial.ttf',
// URL to the images
'imgUrl' => '/images/captcha',
//alt tag to keep SEO guys happy
'imgAlt' => "Captcha Image - Please verify you're human"
)));
Run Code Online (Sandbox Code Playgroud)
然后设置我自己的错误消息:
$captcha->setErrorMessages(array('badCaptcha' => 'My message …Run Code Online (Sandbox Code Playgroud) 随着最新发布的Zend Framework 2版本,增加了两个新的表单元素 ; DateSelect和MonthSelect.我想使用前者,它增加了三个选择; 日,月和年.但是,我有一个问题格式化输出我想要的 - 而且,没有这方面的文档!
我正在将表单元素添加到我的表单中(从此页面中获取):
$this->add(array(
'type' => 'Zend\Form\Element\DateSelect',
'name' => 'birthDate',
'options' => array(
'label' => 'Date',
'create_empty_option' => true,
'day_attributes' => array(
'data-placeholder' => 'Day',
'style' => 'width: 20%',
),
'month_attributes' => array(
'data-placeholder' => 'Month',
'style' => 'width: 20%',
),
'year_attributes' => array(
'data-placeholder' => 'Year',
'style' => 'width: 20%',
)
)
));
Run Code Online (Sandbox Code Playgroud)
对于输出,我这样做:
echo $this->formDateSelect($form->get('birthDate'));
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何控制选择的格式化方式.例如,它们目前以这种形式输出:[month] [day], [year].我想改变两件事; 首先,我想切换日期和月份,其次,我想摆脱逗号.
助手使用IntlDateFormatter该类来格式化选择.在源代码中,我注意到在调用[链接到源代码]时可以使用 …
我是Zend的新手,我已经获得了一个调整项目.我想在我的表单元素的标签中添加html,但我似乎无法做到正确.
这就是我所拥有的:
$this->addElement('text', 'school_name', array(
'filters' => array('StringTrim'),
'validators' => array(
array('StringLength', false, array(0, 150)),
),
'required' => true,
'label' => 'Name* :<img src="picture.png">,
'size' => '90',
));
Run Code Online (Sandbox Code Playgroud)
当然,<img src="picture.png">文本会被转义并显示整个字符串.
我已经读过我需要以'escape' => false某种身份使用但我无法弄清楚在特定情况下在何处/如何使用它.
任何帮助都会很棒.谢谢!
出于样式的目的,我需要<div>在一个元素的开头放置一个开口,在另一个元素</div>的末尾放置一个结束标记.查看HtmlDecorator的文档,我似乎无法弄清楚如何正确使用它,或者这是否是正确的装饰器.为了达到这个目的,必须创建自己的装饰器似乎很浪费.
我有一个下拉菜单Element_Select,我正在变成一个自定义元素,Element_SelectCustom以便我可以直接用值填充它.这是自定义元素
<?php
require_once ('Zend/Form/Element/Select.php');
class Zend_Form_Element_SelectCustom extends Zend_Form_Element_Select
{
public function init() {
$this->addMultiOptions(array(
'NULL' => 'Choose Value',
'1' => 'First',
'2' => 'Second',
'3' => 'Third',
));
return parent::init();
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我将新的自定义元素添加到表单并将其设置为required时,当我不选择值时,它不会触发错误.
$test = new Zend_Form_Element_SelectCustom('test');
$test->setRequired(true);
$this->addElement($test);
Run Code Online (Sandbox Code Playgroud)
我不知道它有什么问题.是否可能需要重新启动另一种方法?
我有一个Zend Form,其中包含一个文件元素。
$this->addElement('file', 'image', array(
'label' => 'Upload Image:',
'destination' => APPLICATION_PATH . '/tmp/',
'validators' => array(
array('count', true, array(
'min' => 1,
'max' => 1,
'messages' => array(
Zend_Validate_File_Count::TOO_FEW =>
'You must upload an image file',
Zend_Validate_File_Count::TOO_MANY =>
'You can only upload one image file'))),
array('extension', true, array(
'extention' => 'jpg,png,gif',
'messages' => array(
Zend_Validate_File_Extension::NOT_FOUND =>
'The file has an invalid extention (jpg,png,gif only)',
Zend_Validate_File_Extension::FALSE_EXTENSION =>
'The file has an invalid extention (jpg,png,gif only)'))),
array('imageSize', true, array(
'minheight' => …Run Code Online (Sandbox Code Playgroud) 我在几个地方使用某种形式.在其中一个中,我需要忽略在验证后以编程方式设置的表单元素.
因为它只是一个例外,我不想创建一个新的表单.所以我想,我只是在控制器中删除这个元素,如:
$myForm->remove('myElement');
Run Code Online (Sandbox Code Playgroud)
问题是表单现在不会验证.我没有得到任何错误,但$myForm->isValid()只是返回一个空值.
我有什么想法可能做错了吗?
谢谢!