2

ファイルアップロード用にsymfonyフォームを実装しました。フォームタイプは以下のようなものです

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
    ->add('file', 'file', array(
        'required' => false,
        'label' => 'Upload Photo',
        'label_attr' => array('class' => 'control-label')

    ));  
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => '<path to entity>'
        ));
}

エンティティは以下のようなものです

//start upload config
/**
 * @Assert\File(maxSize="5M")
 */
private $file;

/**
 * @var string $photo
 *
 * @ORM\Column(type="string", nullable=true)
 */
private $photo;


/**
 * @ORM\PrePersist()
 * @ORM\PreUpdate()
 */
public function preUpload()
{
    //handle upload file 
    if (null !== $this->file) {
        $filename    = $this->getUsername();
        // var_dump($filename);
        $this->photo = $filename.'.'.$this->file->guessExtension();
    }        
}

/**
 * @ORM\PostPersist()
 * @ORM\PostUpdate()
 */
public function upload()
{
    //handle upload file gambar
    if (null === $this->file) {
        return;
    } else {
        $this->file->move($this->getUploadRootDir(), $this->photo);
        unset($this->file);
    }
}

/**
 * @ORM\PostRemove()
 */
public function removeUpload()
{
    //handle upload file gambar
    if ($file = $this->getAbsolutePath()) {
        unlink($file);
    }
}

/**
 * Image upload
 */
public function getAbsolutePath()
{
    return null === $this->photo ? null : $this->getUploadRootDir().'/'.$this->photo;
}

/**
 * Image upload
 */
public function getWebPath()
{
    return null === $this->photo ? null : $this->getUploadDir().'/'.$this->photo;
}

/**
 * Image upload
 */
protected function getUploadRootDir()
{
    return __DIR__.'/../../../../web/'.$this->getUploadDir();
}

/**
 * Image upload
 */
protected function getUploadDir()
{
    return 'foto';
}

そして、アクションの中は以下のようなものです

$entityItem->upload();
$this->em()->persist($entityItem);
$this->em()->flush();

フォームデータを送信しようとすると、以下のようなエラーが発生します

Could not move the file "/tmp/phpS3TVed" to 
"<path to my entity folder>/../../../../web/foto" 
(move_uploaded_file(): Unable to move '/tmp/phpS3TVed' to 
'path to my entity folder>/../../../../web/foto')

このエラーの考えられる原因と、それを取り除く方法を教えてください。ありがとう。

アップデート

時々、upload() の呼び出しを削除しようとしました。それでも、メソッドはまったく呼び出されなくなりました。

4

1 に答える 1

-1

解決しました。

upload() の呼び出しを削除する必要はありません。それを機能させるには、call preUpload() も追加する必要があります。

于 2013-04-04T09:02:55.057 に答える