Image Silverstripe 3设置图像上传的最小宽度和最小高度memberprofil模块
我正在寻找一个解决方案来实现验证,以设置图像上传的最小高度和最小宽度。我认为默认情况下,该框架不提供这些功能Image Silverstripe 3设置图像上传的最小宽度和最小高度memberprofil模块,image,validation,size,silverstripe,Image,Validation,Size,Silverstripe,我正在寻找一个解决方案来实现验证,以设置图像上传的最小高度和最小宽度。我认为默认情况下,该框架不提供这些功能 Example : Allowed image upload minimum width: 500px and minimum height: 500px 下面是我的代码扩展成员数据对象: member_extension.php require_once 'ImageUpload_Validator.php'; class MemberExtension extends DataE
Example : Allowed image upload minimum width: 500px and minimum height: 500px
下面是我的代码扩展成员数据对象:
member_extension.php
require_once 'ImageUpload_Validator.php';
class MemberExtension extends DataExtension {
private static $has_one = array(
'ImageMembre' => 'Image'
);
public function updateMemberFormFields(FieldList $fields) {
//setup the new validator
$validator = new ImageUpload_Validator();
$validator->setMinDimensions(500,500);
$validator->setAllowedExtensions(array('jpg','jpeg', 'gif', 'png'));
//$validator->setAllowedMaxFileSize(array('*' => 4194304));
$fields->push( $Upload = new UploadField('ImageMembre', 'Image membre'));
$Upload->setValidator($validator);
}
function updateCMSFields(FieldList $fields) {
// $fields = parent::getCMSFields();
$uploadfield = new UploadField('ImageMembre','Image Membre');
//setup the new validator
$validator = new ImageUpload_Validator();
$validator->setMinDimensions(500,500);
$validator->setAllowedExtensions(array('jpg','jpeg', 'gif', 'png'));
//$validator->setAllowedMaxFileSize(array('*' => 4194304));
$fields->addFieldToTab('Root.Main',$uploadfield);
$uploadfield->setValidator($validator);
return $fields;
}
保存后,它返回错误:最小图像大小为500px 500px,但我的图像分辨率更高
我认为下面的脚本有一个错误:
ImageUpload_Validator.php
class ImageUpload_Validator extends Upload_Validator{
public $minwidth;
public $minheight;
public function setMinDimensions($width,$height){
if(is_numeric($width) && intval($width)>=0)
$this->minwidth=intval($width);
else
user_error('Invalid minimum width, value must be numeric and at least 0',E_USER_ERROR);
if(is_numeric($height) && intval($height)>=0)
$this->minheight=intval($height);
else
user_error('Invalid minimum height, value must be numeric and at least 0',E_USER_ERROR);
}
public function isValidDimensions() {
//if we cannot determine the image size return false
if(!$dims = getimagesize($this->tmpFile['tmp_name']))
return false;
if(($this->minheight && $dims[1]<=$this->minheight) || ($this->minwidth && $dims[0]<=$this->minwidth))
return false;
return true;
}
public function validate(){
if(!isset($this->tmpFile['name']) || empty($this->tmpFile['name']))
return true;
if(!$this->isValidDimensions()){
$this->errors[]=sprintf('Minimum image size is %s x %s ', $this->minwidth?$this->minwidth.'px':'(ANY)',$this->minheight?$this->minheight.'px':'(ANY)');
return false;
}
return parent::validate();
}
}
class ImageUpload\u Validator扩展了Upload\u Validator{
公共空间的宽度;
公营房屋$minheight ;;
公共函数setMindDimensions($width,$height){
如果(是数值($width)&&intval($width)>=0)
$this->minwidth=intval($width);
其他的
用户错误('最小宽度无效,值必须为数字且至少为0',E\U用户错误);
如果(是数值($height)&&intval($height)>=0)
$this->minheight=intval($height);
其他的
用户错误('最小高度无效,值必须为数字且至少为0',E\U用户错误);
}
公共函数isValidDimensions(){
//如果无法确定图像大小,则返回false
如果(!$dims=getimagesize($this->tmpFile['tmp_name']))
返回false;
如果($this->minheight&&$dims[1]minheight)| |($this->minwidth&&$dims[0]minwidth))
返回false;
返回true;
}
公共函数验证(){
如果(!isset($this->tmpFile['name'])| |为空($this->tmpFile['name']))
返回true;
如果(!$this->isValidDimensions()){
$this->errors[]=sprintf($this->minwidth?$this->minwidth.px':'(任意);$this->minheight?$this->minheight.px':'(任意);
返回false;
}
返回parent::validate();
}
}
在updateMemberFormFields中,您必须切换一些行:
$Upload->setValidator($validator);
$fields->push( $Upload = new UploadField('ImageMembre', 'Image membre'));
应该是
$fields->push( $Upload = new UploadField('ImageMembre', 'Image membre'));
$Upload->setValidator($validator);
否则,您会将某些内容分配给未定义的对象…我已经查阅了问题,并在链接上找到一个提示我的问题重复的顶部。 我意识到我的脚本中有一些错误,我用一些新的编码重新编辑了它。我已经用其他post代码替换了validate函数,它可以工作了
class ImageUpload_Validator extends Upload_Validator{
public $minwidth;
public $minheight;
public function setMinDimensions($width,$height){
if(is_numeric($width) && intval($width)>=0)
$this->minwidth=intval($width);
else
user_error('Invalid minimum width, value must be numeric and at least 0',E_USER_ERROR);
if(is_numeric($height) && intval($height)>=0)
$this->minheight=intval($height);
else
user_error('Invalid minimum height, value must be numeric and at least 0',E_USER_ERROR);
}
public function isImageLargeEnough()
{
$imageSize = getimagesize( $this->tmpFile["tmp_name"] );
if ($imageSize !== false)
{
if ( $imageSize[0] < $this->minwidth || $imageSize[1] < $this->minheight )
{
return false;
}
}
return true;
}
public function validate() {
if(!$this->isImageLargeEnough()) {
//$this->errors[] = 'Image size is not large enough';
$this->errors[]=sprintf('Minimum image size is %s x %s ', $this->minwidth?$this->minwidth.'px':'(ANY)',$this->minheight?$this->minheight.'px':'(ANY)');
return false;
}
return parent::validate();
}
}
class ImageUpload\u Validator扩展了Upload\u Validator{
公共空间的宽度;
公营房屋$minheight ;;
公共函数setMindDimensions($width,$height){
如果(是数值($width)&&intval($width)>=0)
$this->minwidth=intval($width);
其他的
用户错误('最小宽度无效,值必须为数字且至少为0',E\U用户错误);
如果(是数值($height)&&intval($height)>=0)
$this->minheight=intval($height);
其他的
用户错误('最小高度无效,值必须为数字且至少为0',E\U用户错误);
}
公共功能是magerageenough()
{
$imageSize=getimagesize($this->tmpFile[“tmp_name”]);
如果($imageSize!==false)
{
如果($imageSize[0]<$this->minwidth | |$imageSize[1]<$this->minheight)
{
返回false;
}
}
返回true;
}
公共函数验证(){
如果(!$this->isimagerageenough()){
//$this->errors[]=“图像大小不够大”;
$this->errors[]=sprintf($this->minwidth?$this->minwidth.px':'(任意);$this->minheight?$this->minheight.px':'(任意);
返回false;
}
返回parent::validate();
}
}
Hi wmk的可能重复,而不是整个重复。。。我指的是memberprofil模块,当我试图将代码包含到updateMemberFormFields中时,该模块返回错误500。我在CMS中的自定义验证工作正常。这里有一个我用于自定义验证的链接:那么您已经运行了验证并希望将其添加到MemberProfilePage?是的,但当我尝试将其添加到updateMemberFormFields函数时,它返回错误500…您可以共享一些代码和/或挖掘错误日志中的错误吗?我的输出响应太快了!当我点击保存时,它从cms返回验证错误并显示最小宽度和高度问题。。。你能再帮忙吗?谢谢