0

我有一个用户可以上传图像的表单,我将它打印到页面上,如下所示:

<?php echo $this->Form->label('file', 'Image file', array('class' => 'col-lg-1 control-label')); ?>

然后,在模型中,我正在设置验证,如下所示:

public $validate = array(
    'file' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'You must select an image to upload'
        ),
        'extension' => array(
            'rule' => array('extension', array('png')),
            'message' => 'Images must be in PNG format'
        ),
        'size' => array(
            'rule' => array('fileSize', '<', '1MB'),
            'message' => 'Images must be no larger than 1MB'
        ),
        'goodUpload' => array(
            'rule' => 'uploadError',
            'message' => 'Something went wrong with the upload, please try again'
        )
    )
);

但是,Cake 似乎没有将表单字段与验证规则相关联,就好像我选择要上传的图像一样,我总是收到“您必须选择要上传的图像”作为表单错误。我已经确定表格有enctype="multipart/form-data".

发生这种情况是因为file不是数据库字段吗?我怎样才能让蛋糕运行一些验证file

编辑:这是我的整个表格,根据要求: http: //pastebin.com/SbSbtDP9

4

2 回答 2

1

您可以验证不在数据库中的字段,只要您在正确的模型中具有正确的字段名称。

从我在您的代码中可以看到,您似乎在输出标签而不是实际输入,对于图像上传,我会尝试

echo $this->Form->create('Model', array('type'=>'file'));
echo $this->Form->input('file', array('type'=>'file'));
echo $this->Form->submit('Upload Image'):
echo $this->Form->end();

对于验证,我会尝试使用其他验证选项(大小等),CakePHP 通常会在文件上传时在 notEmpty 上抛出错误。所以只检查扩展类型通常就足够了。

public $validate = array(
   'file' => array(
     'rule' => array(
     'extension', array('jpeg', 'jpg')
     'message' => 'You must supply a file.'
     )
   )
);

大部分时间在 CakePHP 中用于图像上传我求助于一个插件,例如https://github.com/josegonzalez/cakephp-upload,它将验证和上传处理合二为一。

于 2013-10-03T19:30:07.223 回答
0

设法弄清楚了。结果证明notEmpty对文件字段进行验证永远不会起作用,它总是认为那里什么都没有,因此总是抛出该验证消息。

通过编写我自己的验证方法来解决它。

于 2013-10-04T08:11:06.317 回答