首页 文章

cakephp文件字段验证

提问于
浏览
2

即时尝试验证模板中的cakephp中的文件字段在创建和更新时的有效扩展名尝试仅在字段不为空时验证文件 . 在创建验证工作正常,但在更新时它验证if字段是否为空 . 我想要仅当字段不为空时才验证扩展名是模型验证数组中的验证规则

'image' => array(
        'rule1'=>array(
            'rule' => array('extension',array('jpeg','jpg','png','gif')),
            'required' => 'create',
            'allowEmpty' => true,
            'message' => 'Select Valid Image',
            'on' => 'create',
            'last'=>true
        ),
        'rule2'=>array(
            'rule' => array('extension',array('jpeg','jpg','png','gif')),
            //'required' => 'create',
            'allowEmpty' => true,
            'message' => 'Select Valid Image',
            'on' => 'update',
        ),
    ),

2 回答

  • 4

    以下是在创建时使用required验证图像字段的正确方法,并且可以允许在更新图像字段时为空

    Image Field Validation Array

    'image' => array(
        'rule1'=>array(
            'rule' => array('extension',array('jpeg','jpg','png','gif')),
            'required' => 'create',
            'allowEmpty' => true,
            'message' => 'Select Valid Image',
            'on' => 'create',
            'last'=>true
        ),
        'rule2'=>array(
            'rule' => array('extension',array('jpeg','jpg','png','gif')),
            'message' => 'Select Valid Image',
            'on' => 'update',
        ),
    ),
    

    And unset the image field on in beforevalidation in update action

    function beforeValidate($options = array()){
        if(empty($this->data[$this->alias]['id']))
        {
            return true;
        }
        else
        {
            if(empty($this->data[$this->alias]["image"]["name"])){
            unset($this->data[$this->alias]["image"]);
            }
            return true; //this is required, otherwise validation will always fail
        }
    }
    
  • 1

    我们可以通过自定义验证来完成以下操作

    public $validate =array(
        'image' => array(
            'rule' => array('checkValidImage'),
            )
        );
    
    
     public function checkValidImage($field)
          {
    
            $extension = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/x-png', 'image/png', 'image/jpg');
            $isValidFile = in_array($field['new_image']['type'], $extension);
            $errors = array();
            $editMethod = false;
            if(!empty($this->data['ModelName']['id'])) // It will work for Update Method
            {
              if(!empty($this->data['ModelName']['image']['name'] ))
              {
                if (($field['image']['error'] == 1)) 
                {
                    $errors [] = "Please upload jpg,png or gif files with size 2 MB.";
                }
                else if (empty($field['image']['name']))
                {
                    $errors [] = "Please upload image";
                } 
                else if ($field['image']['size'] >= 2097152) {
                    $errors [] = "Please upload jpg,png or gif files with size 2 MB.";
                }
                else if ($isValidFile !=1)
                {
    
                    $errors [] = "Please select file in gif,jpeg,png format.";
                }
    
              }else
                    {
                        $errors [] = "Please select file in gif,jpeg,png format.";
                    }
    
            }
            else
            {
                if(!empty($this->data['ModelName']['image']['name'] )) // It will work for Create Method
                {
                    if (($field['image']['error'] == 1)) 
                    {
                        $errors [] = "Please upload jpg,png or gif files with size 2 MB.";
                    }
                    else if (empty($field['ModelName']['name']))
                    {
                        $errors [] = "Please upload image";
                    } 
                    else if ($field['ModelName']['size'] >= 2097152) {
                        $errors [] = "Please upload jpg,png or gif files with size 2 MB.";
                    }
                    else if (!(in_array($field['image']['type'], $extension)))
                    {
                        $errors [] = "Please select file in gif,jpeg,png format.";
                    }
    
                }
    
    
    
            }
    
            if (!empty($errors))
            {
                return implode("\n", $errors);
            }
            return true;
        }
    

相关问题