1

如何获取输入类型文件以验证蛋糕中的 notempty?

当您提交表单而不添加文件时,即使 $this->request->data 显示该文件,验证也会显示它为空。

// 模型/Product.php

class Product extends AppModel {
  public $validate = array(
    'name' => array(
        'rule' => 'notEmpty'
    ),
 );

}

// 控制器/ProductController.php

 public function add() {
    if ($this->request->is('post')) {
        $this->Product->create();
        if ($this->Product->save($this->request->data)) {
            $this->Session->setFlash('Your product has been saved.');
        } else {
            $this->Session->setFlash('Unable to add your product.');
            debug($this->request->data);
            debug($this->Product->validationErrors);
        }
    }
}

// 查看/产品/add.ctp

echo $this->Form->create('Product', array('type' => 'file'));
echo $this->Form->input('name', array('type' => 'file'));
echo $this->Form->end('Save Post');
4

1 回答 1

3

我认为您实际上不能在 -some special- file 字段上使用 notEmpty。文件字段的处理方式与任何其他输入字段不同,因为它返回超全局 $_FILES 作为结果。因此,您应该稍微检查一下。CakePHP 文档中实际上有一个很好的例子。

现在这是实际上传的文件,但您可以通过检查name密钥是否不为空并实际设置来轻松更改它。像这样作为模型中的自定义验证规则的东西应该可以解决问题:

public function fileSelected($file) {
    return (is_array($file) && array_key_exists('name', $file) && !empty($file['name']));
}

然后将其设置为文件字段的验证规则:

public $validate = array(
   'name' => array(
       'rule' => 'fileSelected'
   ),
);
于 2012-10-20T12:35:02.070 回答