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'
),
)