在symfony 1.4动作中保存照片或文件

时间:2014-06-17 09:19:13

标签: php symfony-1.4

我很难在我的数据库中保存文件或照片。在我的行动中

 if($r->isMethod('post')) {
        $this->form->bind($r->getParameter('applicants'), $r->getFiles('applicants'));          
        //$this->form->bind($r->getParameter('applicants'));
        $this->familyForm->bind($r->getParameter('applicant_family_info'));
        if($this->form->isValid() && $this->familyForm->isValid()) {
            $values = $this->form->getValues();
            $familyValues = $this->familyForm->getValues();
            $applicantId = Doctrine_Core::getTable('Applicants')->createOrUpdateObject($values, $familyValues, $this->getUser()->getUsername());
            $this->getUser()->setFlash('good', 'New applicant record created successfully!');
            $this->redirect('loans/new_applicant_loan?applicant_id='.$applicantId);

这将保存输入的数据减去照片列。但是,如果我添加$ this-> form-> save(); ,这将保存包括照片字段在内的数据,但照片是重复的,有关如何解决此问题的任何想法?

enter image description here

使用$ this-> form-> save();

enter image description here

如果我删除$ this-> form-> save(),则

返回null;顺便说一句,我有两个表格,申请人和applicant_family_info

和此ApplicantsTable.class.php

public function createOrUpdateObject($values, $infoValues, $currentLoggedInUser, $obj = null) {
    $isUpdate = true;
    if(empty($obj)) {
        $obj = new Applicants();
        $isUpdate = false;
    }

    $db = $this->getConnection();
    $db->beginTransaction();
    foreach($values as $k=>$v) {
        $obj->$k = $v;
    }
    if(!$isUpdate) {
        $obj->created_by = $currentLoggedInUser;
        $obj->date_created = date('Y-m-d H:i:s');
    } else {
        $obj->updated_by = $currentLoggedInUser;
        $obj->date_updated = date('Y-m-d H:i:s');
    }

    $obj->save();
    if(!$isUpdate) {
        $applicantId = $db->lastInsertId();
    } else {
        $applicantId = $obj->id;
    }

    if(!$isUpdate) {
        $info = new ApplicantFamilyInfo();
    } else {
        $info = $obj->ApplicantFamilyInfo;
    }
    foreach($infoValues as $k=>$v) {
        $info->$k = $v;
    }

    $info->applicant_id = $applicantId;
    $info->save();

    $db->commit();

    return $applicantId;
}

2 个答案:

答案 0 :(得分:0)

当您使用form->save()然后调用createOrUpdateObject()时,您将对象保存到数据库两次,这就是您在申请人表格中有重复条目的原因。

'魔术'为什么在第一种情况下你得到文件名而在第二种情况下不在于Symfony处理上传文件的方式。在第二种情况下,您从表单中读取值,包括photo字段,但该字段实际上没有设置值(有一个与该字段关联的文件,但它不是它的'“值” )。当您第一次执行表单的save方法时,Symfony会处理文件上载(将文件从临时位置移动到上传的文件,更改名称等)并作为回报设置photo字段的值你是文件的完整物理路径。

你真的需要createOrUpdateObject功能吗?除了保存表单之外,还能做什么吗?如果您需要修改任何其他值,您可以始终使用Doctrine的生命周期函数:preSavepreInsertpostDelete等。

答案 1 :(得分:0)

经过一些谷歌搜索,并尝试,我终于找到了解决我的问题的方法。文件路径成功保存在mysql中,这次没有重复。这是我编辑的代码:

if($r->isMethod('post')) {
        $this->form->bind($r->getParameter('applicants'), $r->getFiles('applicants'));  
        $photo = $this->form->getValue('photo');
        $photo->save();     
        $this->familyForm->bind($r->getParameter('applicant_family_info'));
        if($this->form->isValid() && $this->familyForm->isValid()) {
            $values = $this->form->getValues();
            //$this->form->save();
            //$values = $this->form->getValues('photo');
            //$photo->save();
            //$filename = 'photo'.sha1($photo->getOriginalName());
           //$extension = $photo->getExtension($photo->getOriginalExtension());
           //$photo->save(sfConfig::get('sf_upload_dir'));// . $filename . $extension);
            //$photo->save(sfConfig::get('sf_upload_dir') . '/'.$photo . date('Ym'));// . '/' . $filename . $extension);

            //$photo->save(sfConfig::get('sf_upload_dir').'/photos/'.$photo);
            $familyValues = $this->familyForm->getValues();
            $applicantId = Doctrine_Core::getTable('Applicants')->createOrUpdateObject($values, $familyValues, $this->getUser()->getUsername());
            $this->getUser()->setFlash('good', 'New applicant record created successfully!');
            $this->redirect('loans/new_applicant_loan?applicant_id='.$applicantId);
        }
    }
}

这是mysql enter image description here

在这里,在我的模板中出现了我的新问题..

<?php echo $applicant->photo ?>

将渲染文件名而不是图像(C:\ wamp \ www \ ian_loans \ web \ uploads / photos \ 85c4153ed074657c58db526e5f8349183cb08469.jpg) 我试过

<td width="129" rowspan="5"><img src="/uploads/photos/<?php echo($applicant->photo)?>" width="129" height="129" /></td>

并且照片永远不会出现......我在这里缺少什么?