- 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/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!