2013-01-09 74 views
2

我找不到为什么我的代码无法正常工作。我尝试通过表单上传图像并将其保存在目录中,但它不存在。对于测试,我确实在窗体上显示文件对象的回显,以显示文件和扩展名及其正确的名称,但未保存。Symfony图像上传

这里是我的代码:

形式:

class WgrajForm extends sfForm 
{ 
    public function configure() 
    { 
    $this->setWidgets(array(
     'zdjęcie' => new sfWidgetFormInputFile(), 
     'nazwa' => new sfWidgetFormInput(), 
    )); 

    $this->setValidators(array(
     'zdjęcie' => new sfValidatorFile(array(
      'mime_types' => 'web_images', 
      'path'  => '/projektSymfony/web/images', 
     ),array(
      'mime_types' => 'Plik może być tylko zdjęciem' 
     ) 
    ), 
     'nazwa' => new sfValidatorString(array(), array('required' => 'pole wymagane')), 
    )); 

    $this->getWidgetSchema()->setNameFormat('wgraj[%s]'); 
    } 
} 

操作:

public function executeDodaj(sfWebRequest $request) 
{ 
    $this->form= new WgrajForm(); 

    if ($request->isMethod('post')) 
    { 
    $this->form->bind(
    $request->getParameter('wgraj'), 
    $request->getFiles('wgraj')); 

    if ($this->form->isValid()) 
    { 
     $wgrane  = $this->form->getValues(); 
     $plik   = $wgrane['zdjęcie']; 
     $pliknazwa = $wgrane['nazwa']; 
     $rozszerzenie = $plik->getExtension($plik->getOriginalExtension()); 
     $plik->save('/projektSymfony/web/images/'.$pliknazwa.$rozszerzenie); 
     //$this->redirect('galeria/index'); 
    } 
    } 
} 

回答

0

path参数是更好,当你在你的情况下使用sfConfig::get('sf_upload_dir')sfConfig::get('sf_web_dir')

您不需要在动作中使用save()小部件。你只需要保存表单,然后,它会保存图像。

if ($this->form->isValid()) 
{ 
    $this->form->save(); 

    $this->redirect('galeria/index'); 
} 

看看文档,你会发现很多信息,特别是the part of Jobeet tutorial about Form

+2

这是'sfForm',所以它没有保存方法 – 1ed

+0

@ 1ed好点。 – j0k