【问题标题】:Image validation extension validation only if not empty issue仅当不是空问题时才进行图像验证扩展验证
【发布时间】:2015-09-18 11:21:24
【问题描述】:

我在 cakephp 中使用图像文件的验证规则,我只想在不为空时验证图像扩展名。 问题是,如果我不提供图像,cakephp 正在验证扩展名,因此它会给出验证错误“仅图像文件” 这是我用来验证图像的验证规则

image' => array(
            'notEmpty' => array(
                //'message' => 'Your custom message here',
                'allowEmpty' => true,
                'required' => false,
                //'last' => false, // Stop validation after this rule
                //'on' => 'create', // Limit validation to 'create' or 'update' operations
            ),
            'extension' => array(
                'rule' => array('extension', array('png','jpg','jpeg')),
                'message' => 'Only images files',
            ),

我用这个插件上传图片https://github.com/josegonzalez/cakephp-upload.

【问题讨论】:

    标签: php validation cakephp


    【解决方案1】:

    您的notEmpty 规则似乎没有做任何事情,因为您没有指定规则,因此可能会被删除。

    您需要将'allowEmpty' => true 添加到extension 规则中,以告诉Cake 如果该字段为空则忽略该规则:-

    public $validate = array(
        'image' => array(
            'extension' => array(
                'rule' => array('extension', array('png','jpg','jpeg')),
                'message' => 'Only images files',
                'allowEmpty' => true
            )
        )
    );
    

    更新

    CakePHP 上传插件有其own extension validation ruleisValidExtension,您可以使用它们:-

    public $validate = array(
        'image' => array(
            'extension' => array(
                'rule' => array(
                    'isValidExtension', 
                    array('png','jpg','jpeg'), 
                    false
                ),
                'message' => 'Only images files'
            )
        )
    );
    

    false 作为规则的第三个参数(如上)可确保仅在上传文件时检查该规则。

    【讨论】:

    • 它不起作用,我已经尝试过了,即使将 allowempty 设置为 true,我也不知道是什么导致了这个验证错误
    • 你确定image 是空的吗?您是否尝试过调试 extension 验证规则本身以查看失败的原因?
    • 感谢您指出这一点,在插件文档中搜索后,我找到了插件的自定义验证,所以我认为它给出了一个空字符串,所以这就是我收到验证错误的原因,这里是链接cakephp-upload.readthedocs.org/en/latest/…,你可以把它接受答案
    • @user1655410 我已将isValidExtension 的详细信息添加到我的答案中。 :-)
    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 2022-10-19
    • 2021-04-18
    • 2021-11-06
    • 1970-01-01
    • 2020-12-28
    • 2011-06-17
    • 2018-10-10
    相关资源
    最近更新 更多