【问题标题】:cakephp file field validationcakephp 文件字段验证
【发布时间】:2013-05-11 02:32:14
【问题描述】:

我正在尝试验证模型中 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',
        ),
    ),

【问题讨论】:

  • 你在使用插件吗?如果是这样,请在您的问题中包含该信息。如果没有,考虑使用一个,比如github.com/josegonzalez/upload
  • 不,我没有使用任何插件,但我使用模型 beforeSave 方法来上传和处理文件

标签: cakephp cakephp-2.0


【解决方案1】:

这是验证创建时需要的图像字段的正确方法,并且可以在更新图像字段时允许为空

图像字段验证数组

'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',
    ),
),

并在更新操作的 beforevalidation 中取消设置图像字段

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
    }
}

【讨论】:

    【解决方案2】:

    我们可以通过自定义验证来做到这一点,如下所示

    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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 2017-12-07
      相关资源
      最近更新 更多