Php 仅在创建记录时进行文件上载验证,不进行编辑

Php 仅在创建记录时进行文件上载验证,不进行编辑,php,cakephp,cakephp-1.3,Php,Cakephp,Cakephp 1.3,我有一个允许上传文件的表单,我使用数据验证来检查它是什么类型的文件,这很好。我想做的是允许他们编辑同一条记录,但当时不需要上传文件 我的验证规则如下: 'header_pic' => array( 'extension' => array( 'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')), 'message' => 'Y

我有一个允许上传文件的表单,我使用数据验证来检查它是什么类型的文件,这很好。我想做的是允许他们编辑同一条记录,但当时不需要上传文件

我的验证规则如下:

    'header_pic' => array(
        'extension' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'message' => 'You must supply a GIF, PNG, or JPG file.',
        )
    )
但是这个规则需要一个文件。我找到了“on”参数,可以将其添加到此规则中,但它只会在创建时检查文件。不需要编辑

我试过了,但没用:

   'header_pic' => array(
        'extension' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'required' => false,
            'allowEmpty' => true,
            'message' => 'You must supply a GIF, PNG, or JPG file.',
        ),
        'notEmpty' => array(
            'rule' => array( 'notEmpty'),
            'on' => 'create',
            'message' => 'You must supply a file.',
        ),
    )

我错过了什么?(提前感谢!!)

我也遇到了同样的问题,我的解决方案不是很好,但对我有效,我所做的是,允许空=>真的。在控制器上的编辑功能中,我将该图像的数据传递到$this->data数组,类似这样,因此当您转到表单时,您已经有了包含一些数据的字段“image”,您不必再次上传或修改该图像

如果不清楚,就告诉我,我会尽力把它说清楚

我希望它对你有用

function admin_edit($id = null) {
        if (!$id && empty($this->data)) {
                $this->Session->setFlash(__('Invalid category', true));
                $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {

            if(!empty($this->data['Category']['image']['name']))
            {
                $image_name = $this->Picture->upload_image_and_thumbnail($this->data,"image",570,70,"categories",true,"Category");
                $this->data['Category']['image'] =  $image_name;
            }
            else{
                $image_name = $this->Category->find('first',array(
                   'conditions'=> array(
                       'Category.id' => $this->data['Category']['id']
                   ),
                    'fields' => array(
                        'Category.image'
                    )
                ));
                $this->data['Category']['image'] = $image_name['Category']['image'];
            }


                if ($this->Category->save($this->data)) {
                        $this->Session->setFlash(__('The category has been saved', true));
                        $this->redirect(array('action' => 'index'));
                } else {

                        $this->Session->setFlash(__('The category could not be saved. Please, try again.', true));
                }
        }
        if (empty($this->data)) {
                $this->data = $this->Category->read(null, $id);
        }

}
我也用这个 我成功了 试试 如果你需要的话,做些改变。 好吧,我想出来了。(感谢omabena和RSK的建议。)我发现我可以设置两个验证规则,一个用于添加,一个用于创建。很干净

   'header_pic' => array(
        'extension' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'message' => 'You must supply a GIF, PNG, or JPG file.',
            'required' => false,
            'on' => 'add'
        ),
        'extension2' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'message' => 'You must supply a GIF, PNG, or JPG file.',
            'required' => true,
            'on' => 'create'
        ),
    )
   'header_pic' => array(
        'extension' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'message' => 'You must supply a GIF, PNG, or JPG file.',
            'required' => false,
            'on' => 'add'
        ),
        'extension2' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'message' => 'You must supply a GIF, PNG, or JPG file.',
            'required' => true,
            'on' => 'create'
        ),
    )