关于zend框架:编辑后在数据库中删除的图像

Image deleted in database after editing

我使用的是 Zend Framework 1.11,在编辑记录后,即使没有上传其他图像,图像文件字段也会被清空。

我之前在 sql 查询中使用这个 mysql 解决了这个问题:

1
image=ifnull(%s, image)

而且工作完美。我现在正在与 Zend 合作,但我不确定如何做到这一点。有人可以帮忙吗?

控制器代码:

1
2
3
4
5
6
$input = $form->getValues();
        $item = Doctrine::getTable('Tcc_Model_Item')
            ->find($input['article_id']);

        $item->fromArray($input);
        $item->save();

更新是使用学说模型完成的。

表单域是:

1
2
3
4
5
6
7
8
9
10
11
12
$image = new Zend_Form_Element_File('image');
 $image->setLabel('Image')
        ->addValidator('IsImage')
        ->setDestination('../public/uploads')
        ->addValidator('Size', false, '404800')
        ->addValidator('Extension', false, 'jpg,png,gif')
        ->addValidator('ImageSize', false, array(
                        'minwindth' => 50,
                        'minheight' => 50,
                        'maxwidth' => 250,
                        'maxheight' => 250))
     ->setOptions(array('class' => 'create'));


我想回答我自己的问题,因为我自己找到了一个可以帮助其他人的解决方案。

所以我为解决这个问题所做的是:

  • 向用于编辑的表单添加了一个隐藏字段,如下所示:

    $image = new Zend_Form_Element_Hidden(\\'image\\');

  • 更改为图像文件字段(要上传的新图像),具有不同的名称,如下所示:

    $image2 = new Zend_Form_Element_File(\\'image2\\');

  • 这样编辑隐藏字段时会包含"image"字段的信息(如果有)。

    然后在控制器中,我只是在 save() 之前有一个 if/else 语句,如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(!empty($input['image2']))
           {
                $item->image = $input['image2'];
        } else {
                $item->image = $input['image'];
            }


     $item->save();

    希望它能帮助其他有同样问题的人。