我一直试图让这个工作一段时间,无数的谷歌搜索没有带来任何帮助。
我想知道是否有办法验证表单fileinput中的变量。所以在“上传”表单中我想确保upload [name]不为空。我可以用Cakephp的模型验证来完成这个吗?
答案 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)
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