- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Zend 表单,其中包含一个文件元素。
$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' => self::IMAGEHEIGHT,
'minwidth' => self::IMAGEWIDTH,
'maxheight' => self::IMAGEHEIGHT,
'maxwidth' => self::IMAGEWIDTH,
'messages' => array(
Zend_Validate_File_ImageSize::HEIGHT_TOO_BIG =>
'The image must be exactly ' . self::IMAGEHEIGHT . ' pixels tall',
Zend_Validate_File_ImageSize::HEIGHT_TOO_SMALL =>
'The image must be exactly ' . self::IMAGEHEIGHT . ' pixels tall',
Zend_Validate_File_ImageSize::WIDTH_TOO_BIG =>
'The image must be exactly ' . self::IMAGEWIDTH . ' pixels wide',
Zend_Validate_File_ImageSize::WIDTH_TOO_SMALL =>
'The image must be exactly ' . self::IMAGEWIDTH . ' pixels wide',
Zend_Validate_File_ImageSize::NOT_DETECTED =>
'The image dimensions cannot be detected',
Zend_Validate_File_ImageSize::NOT_READABLE =>
'The image dimensions cannot be read'))))
));
public function formValid(Array $params)
{
if (is_null($this->_form))
throw new Zend_Exception('You must first initialize the form');
$formValid = $this->_validateForm($this->_form, $params);
// Workaround for bug in validating file elements
if (!$formValid) {
if (!$this->_form->getMessages()) {
$formValid = true;
$this->_validValues = $this->_form->getValidValues($params);
}
}
if ($formValid) {
if ($this->_form instanceof Admin_Form_AddDirectSite ||
$this->_form instanceof Admin_Form_EditDirectSite) {
if (isset($this->_validValues['replaceImage'])) {
return $this->_form->getElement('image')->receive();
} else {
return true;
}
} elseif ($this->_form instanceof Admin_Form_PromoteDirectSite) {
$today = new Zend_Date();
$expires = new zend_date($this->_validValues['DirectSitesHighlighted']['toDate']);
if ($expires->isEarlier($today)) {
$this->_form->getSubForm('DirectSitesHighlighted')
->getElement('toDate')
->addError('The date must be in the future');
return false;
} else {
return true;
}
} else {
return true;
}
} else {
return false;
}
}
protected function _validateForm(Zend_Form $form, Array $params)
{
if ($form->isValid($params)) {
$this->_validValues = $form->getValidValues($params);
return true;
} else {
$this->_validValues = null;
return false;
}
}
public function initAddForm()
{
$this->_form = new Admin_Form_AddDirectSite();
return $this;
}
public function initEditForm()
{
$this->_form = new Admin_Form_EditDirectSite();
return $this;
}
class Admin_Form_AddDirectSite extends Admin_Form_DirectSites_Abstract
{
public function init()
{
parent::init();
$this->setAction('/admin/direct-sites/add');
$this->setDecorators(array(
array('ViewScript', array('viewScript' => 'forms/addDirectSites.phtml'))
));
$this->getElement('image')->setRequired(true);
$this->addElement('hidden', 'replaceImage', array(
'required' => true,
'label' => 'Replace Image:',
'value' => 1,
'filters' => array('Int'),
));
}
}
class Admin_Form_EditDirectSite extends Admin_Form_DirectSites_Abstract
{
public function init()
{
parent::init();
$this->setAction('/admin/direct-sites/edit');
$this->setDecorators(array(
array('ViewScript', array('viewScript' => 'forms/editDirectSites.phtml'))
));
$this->getElement('image')->setRequired(false);
$this->addElement('checkbox', 'replaceImage', array(
'required' => false,
'label' => 'Replace Image:',
'checked' => false,
'attribs' => array(
'title' => 'Click to replace the image file'
),
'filters' => array('Int'),
'validators' => array(
array('Int', true, array(
'messages' => array(
Zend_Validate_Int::NOT_INT =>
'You must check to replace the image file'))))
));
$this->addElement('hidden', 'directSiteId', array(
'required' => false,
'vslue' => null
));
}
}
abstract class Admin_Form_DirectSites_Abstract extends Freedom_Zend_Form
{
/**
* Domain prefix http://www.
* @var integer
*/
const HTTPWWW = 1;
/**
* Domain prefix http://
* @var integer
*/
const HTTP = 2;
/**
* The image width in pixels
* @var integer
*/
const IMAGEWIDTH = 100;
/**
* The image height in pixels
* @var integer
*/
const IMAGEHEIGHT = 100;
/**
* Initialize the form
* @see Zend_Form::init()
*/
public function init()
{
$domainPrefix = array(
self::HTTPWWW => 'http://www.',
self::HTTP => 'http;//'
);
$genres = Model_Doctrine_GenresTable::getInstance()->getAllKeyPairs();
$artworkMediums = Model_Doctrine_ArtworkMediumsTable::getInstance()->getAllKeyPairs();
$this->setName('directSitesForm') // setup registration form
->setAttrib('id', 'directSitesForm')
->setMethod('post')
->setAttrib('class', 'directSitesForm')
->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
$this->addElementPrefixPath('Freedom_Zend', 'Freedom/Zend'); // add element prefix path
$this->addPrefixPath('Freedom_Zend_Form', 'Freedom/Zend/Form'); // add form prefix path
$directSitesDescription = new Zend_Form_SubForm();
$directSitesTitle = new Zend_Form_SubForm();
$this->addElement('text', 'domainName', array(
'required' => true,
'label' => 'Domain Name:',
'attribs' => array(
'title' => 'Please enter the url of the site',
'size' => 20,
'maxlength' => 255
),
'filters' => array('StringTrim', 'StripTags', 'StripNewlines'),
'validators' => array(
array('NotEmpty', true, array(
'messages' => array(
Zend_Validate_NotEmpty::IS_EMPTY =>
"You must specify the domain name"))),
array('StringLength', true, array(
'min' => 5,
'max' => 255,
'messages' => array(
Zend_Validate_StringLength::INVALID =>
'Your URL must be between 5 and 255 characters in length',
Zend_Validate_StringLength::TOO_LONG =>
'Your URL must not contain more than 255 characters',
Zend_Validate_StringLength::TOO_SHORT =>
'Your URL must contain more than 5 characters'))))
));
$this->addElement('radio', 'websitePrefix', array(
'required' => true,
'label' => 'Domain Prefix:',
'attribs' => array(
'title' => 'Please select the URL prefix for the domain name'
),
'multiOptions' => $domainPrefix,
'value' => self::HTTPWWW,
'filters' => array('int'),
'validators' => array(
array('NotEmpty', true, array(
'messages' => array(
Zend_Validate_NotEmpty::IS_EMPTY =>
"You must select your agency's website URL",
Zend_Validate_NotEmpty::INVALID =>
"You must select your agency's website URL"))),
array('InArray', true, array(
'haystack' => array_keys($domainPrefix),
'messages' => array(
Zend_Validate_InArray::NOT_IN_ARRAY =>
"You must select your agency's website URL"))))
));
$directSitesTitle->addElement('text', 'title', array(
'required' => true,
'label' => 'Title:',
'attribs' => array(
'title' => 'Please enter the name of the site',
'size' => 20,
'maxlength' => 255
),
'filters' => array('StringTrim', 'StripTags', 'StripNewlines'),
'validators' => array(
array('NotEmpty', true, array(
'messages' => array(
Zend_Validate_NotEmpty::IS_EMPTY =>
"You must specify the sites title"))),
array('StringLength', true, array(
'min' => 5,
'max' => 100,
'messages' => array(
Zend_Validate_StringLength::INVALID =>
'Your title must be between 5 and 100 characters in length',
Zend_Validate_StringLength::TOO_LONG =>
'Your title must not contain more than 100 characters',
Zend_Validate_StringLength::TOO_SHORT =>
'Your title must contain more than 5 characters'))))
));
$directSitesDescription->addElement('text', 'description', array(
'required' => true,
'label' => 'Description:',
'attribs' => array(
'title' => 'Please enter the description of the site',
'size' => 50,
'maxlength' => 100
),
'filters' => array('StringTrim', 'StripTags', 'StripNewlines'),
'validators' => array(
array('NotEmpty', true, array(
'messages' => array(
Zend_Validate_NotEmpty::IS_EMPTY =>
"You must specify the sites description"))),
array('StringLength', true, array(
'min' => 5,
'max' => 100,
'messages' => array(
Zend_Validate_StringLength::INVALID =>
'Your sites description must be between 5 and 100 characters in length',
Zend_Validate_StringLength::TOO_LONG =>
'Your sites description must not contain more than 100 characters',
Zend_Validate_StringLength::TOO_SHORT =>
'Your sites description must contain more than 5 characters'))))
));
$this->addElement('file', 'image', array(
'label' => 'Upload Image:',
'destination' => APPLICATION_PATH . '/tmp/',
'validators' => array(
array('count', true, array(
'min' => 0,
'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' => self::IMAGEHEIGHT,
'minwidth' => self::IMAGEWIDTH,
'maxheight' => self::IMAGEHEIGHT,
'maxwidth' => self::IMAGEWIDTH,
'messages' => array(
Zend_Validate_File_ImageSize::HEIGHT_TOO_BIG =>
'The image must be exactly ' . self::IMAGEHEIGHT . ' pixels tall',
Zend_Validate_File_ImageSize::HEIGHT_TOO_SMALL =>
'The image must be exactly ' . self::IMAGEHEIGHT . ' pixels tall',
Zend_Validate_File_ImageSize::WIDTH_TOO_BIG =>
'The image must be exactly ' . self::IMAGEWIDTH . ' pixels wide',
Zend_Validate_File_ImageSize::WIDTH_TOO_SMALL =>
'The image must be exactly ' . self::IMAGEWIDTH . ' pixels wide',
Zend_Validate_File_ImageSize::NOT_DETECTED =>
'The image dimensions cannot be detected',
Zend_Validate_File_ImageSize::NOT_READABLE =>
'The image dimensions cannot be read'))))
));
$this->addElement('multiCheckbox', 'Genres', array(
'required' => false,
'label' => 'Genres:',
'attribs' => array(
'title' => 'Please select the sites genres'
),
'multiOptions' => $genres,
'filters' => array('int'),
'validators' => array(
array('NotEmpty', true, array(
'messages' => array(
Zend_Validate_NotEmpty::IS_EMPTY =>
"You must select the sites genres",
Zend_Validate_NotEmpty::INVALID =>
"You must select the sites genres"))),
array('InArray', true, array(
'haystack' => array_keys($genres),
'messages' => array(
Zend_Validate_InArray::NOT_IN_ARRAY =>
"You must select the sites genres"))))
));
$this->addElement('multiCheckbox', 'ArtworkMediums', array(
'required' => false,
'label' => 'Artwork Mediums:',
'attribs' => array(
'title' => 'Please select the sites artwork mediums'
),
'multiOptions' => $artworkMediums,
'filters' => array('int'),
'validators' => array(
array('NotEmpty', true, array(
'messages' => array(
Zend_Validate_NotEmpty::IS_EMPTY =>
"You must select the sites artwork mediums",
Zend_Validate_NotEmpty::INVALID =>
"You must select the sites artwork mediums"))),
array('InArray', true, array(
'haystack' => array_keys($artworkMediums),
'messages' => array(
Zend_Validate_InArray::NOT_IN_ARRAY =>
"You must select the sites artwork mediums"))))
));
$this->addElement('submit', 'save', array(
'label' => 'Save',
'attribs' => array(
'title' => 'Save')
));
$this->addSubForm($directSitesDescription, 'DirectSitesDescription')
->addSubForm($directSitesTitle, 'DirectSitesTitle');
}
}
最佳答案
我只能看到你的 'count'
验证器看起来有点不稳定,看起来您始终需要至少 1 个文件。至于为什么没有错误消息,我不知道。
可以试试设置'min' => 0
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'))),
__construct( integer|array|\Zend_Config $options ) : void Sets validator options
Min limits the file count, when used with max=null it is the maximum file count It also accepts an array with the keys 'min' and 'max' If $options is a integer, it will be used as maximum file count As Array is accepts the following keys: 'min': Minimum filecount 'max': Maximum filecount Parameters Name Type Description $options integer|array|\Zend_Config Options for the adapter
关于zend-framework - Zend_Form_Element_File 在不需要时在验证时返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9345375/
我正在尝试用 C 语言编写一个使用 gstreamer 的 GTK+ 应用程序。 GTK+ 需要 gtk_main() 来执行。 gstreamer 需要 g_main_loop_run() 来执行。
我已经使用 apt-get 安装了 opencv。我得到了以下版本的opencv2,它工作正常: rover@rover_pi:/usr/lib/arm-linux-gnueabihf $ pytho
我有一个看起来像这样的 View 层次结构(基于其他答案和 Apple 的使用 UIScrollView 的高级 AutoLayout 指南): ScrollView 所需的2 个步骤是: 为 Scr
我尝试安装 udev。 udev 在 ./configure 期间给我一个错误 --exists: command not found configure: error: pkg-config and
我正在使用 SQLite 3。我有一个表,forums,有 150 行,还有一个表,posts,有大约 440 万行。每个帖子都属于一个论坛。 我想从每个论坛中选择最新帖子的时间戳。如果我使用 SEL
使用 go 和以下包: github.com/julienschmidt/httprouter github.com/shwoodard/jsonapi gopkg.in/mgo.v2/bson
The database仅包含 2 个表: 钱包(100 万行) 事务(1500 万行) CockroachDB 19.2.6 在 3 台 Ubuntu 机器上运行 每个 2vCPU 每个 8GB R
我很难理解为什么在下面的代码中直接调用 std::swap() 会导致编译错误,而使用 std::iter_swap 编译却没有任何错误. 来自 iter_swap() versus swap() -
我有一个非常简单的 SELECT *用 WHERE NOT EXISTS 查询条款。 SELECT * FROM "BMAN_TP3"."TT_SPLDR_55E63A28_59358" SELECT
我试图按部分组织我的 .css 文件,我需要从任何文件访问文件组中的任何类。在 Less 中,我可以毫无问题地创建一个包含所有文件导入的主文件,并且每个文件都导入主文件,但在 Sass 中,我收到一个
Microsoft.AspNet.SignalR.Redis 和 StackExchange.Redis.Extensions.Core 在同一个项目中使用。前者需要StackExchange.Red
这个问题在这里已经有了答案: Updating from Rails 4.0 to 4.1 gives sass-rails railties version conflicts (4 个答案) 关
我们有一些使用 Azure DevOps 发布管道部署到的现场服务器。我们已经使用这些发布管道几个月了,没有出现任何问题。今天,我们在下载该项目的工件时开始出现身份验证错误。 部署组中的节点显示在线,
Tip: instead of creating indexes here, run queries in your code – if you're missing any indexes, you
你能解释一下 Elm 下一个声明中的意思吗? (=>) = (,) 我在 Elm architecture tutorial 的例子中找到了它 最佳答案 这是中缀符号。实际上,这定义了一个函数 (=>
我需要一个 .NET 程序集查看器,它可以显示低级详细信息,例如元数据表内容等。 最佳答案 ildasm 是 IL 反汇编程序,具有低级托管元数据 token 信息。安装 Visual Studio
我有两个列表要在 Excel 中进行比较。这是一个很长的列表,我需要一个 excel 函数或 vba 代码来执行此操作。我已经没有想法了,因此转向你: **Old List** A
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在学习 xml 和 xml 处理。我无法很好地理解命名空间的存在。 我了解到命名空间帮助我们在 xml 中分离相同命名的元素。我们不能通过具有相同名称的属性来区分元素吗?为什么命名空间很重要或需要
我搜索了 Azure 文档、各种社区论坛和 google,但没有找到关于需要在公司防火墙上打开哪些端口以允许 Azure 所有组件(blob、sql、compute、bus、publish)的简洁声明
我是一名优秀的程序员,十分优秀!