CakePhp上传验证

时间:2012-11-22 20:49:02

标签: php forms cakephp cakephp-2.0

我一直试图让这个工作一段时间,无数的谷歌搜索没有带来任何帮助。

我想知道是否有办法验证表单fileinput中的变量。所以在“上传”表单中我想确保upload [name]不为空。我可以用Cakephp的模型验证来完成这个吗?

2 个答案:

答案 0 :(得分:5)

Cakephp中无法验证fileinput字段。

您可以通过自定义验证规则执行此操作,例如以下示例

用于查看文件

<?php
    echo $this->Form->file('image');
    echo $this->Form->error('image');
?>

对于模型文件

<?php
    public $validate = array(
        'image' => array(
            'rule' => array('chkImageExtension'),
            'message' => 'Please Upload Valid Image.'
        )
    );



    public function chkImageExtension($data) {
       $return = true; 

       if($data['image']['name'] != ''){
            $fileData   = pathinfo($data['image']['name']);
            $ext        = $fileData['extension'];
            $allowExtension = array('gif', 'jpeg', 'png', 'jpg');

            if(in_array($ext, $allowExtension)) {
                $return = true; 
            } else {
                $return = false;
            }   
        } else {
            $return = false; 
        }   

        return $return;
    }   
?>

答案 1 :(得分:0)

@Sunman Singh的回答不再适用。

static Validation::extension(mixed $check, array $extensions = array('gif', 'jpeg', 'png', 'jpg'))
  

此规则会检查有效的文件扩展名,例如.jpg.png。允许   通过以array形式传递多个扩展名。

public $validate = array(
  'image' => array(
    'rule' => array(
          'extension',
           array('gif', 'jpeg', 'png', 'jpg')
      ),
      'message' => 'Please supply a valid image.'
  )
);
static Validation::fileSize($check, $operator = null, $size = null)
  

此规则允许您检查文件大小。您可以使用$operator   决定您要使用的比较类型。所有运营商   此处也支持comparison()支持。这种方法会   通过读取来自$_FILES自动处理数组值   如果tmp_name$check且包含该密钥,则为array密钥:

public $validate = array(
  'image' => array(
      'rule' => array('fileSize', '<=', '1MB'),
      'message' => 'Image must be less than 1MB'
  )
);

请参阅以下链接以获取参考。尽管如此,我建议您编写自己的功能以获得更高的安全性,但这些肯定会为您节省一些时间

http://book.cakephp.org/2.0/en/models/data-validation.html#Validation::extension