2015-02-20 5 views
0

Я использую doctrine2 с symfony2.Загрузите несколько файлов для каждого объекта

Это моя сущность для загрузки файла.

Во-первых, вызвать SetFile() и положить путь к $ this-> Температура,

тогда, preUpload называется, загрузить называется.

Это нормально для загрузки одного файла для каждого объекта, однако я хотел бы загрузить несколько файлов для каждого объекта.

Как я могу справиться с этим?

У вас есть образцы для этой цели?

/** 
* @ORM\Column(type="string", length=255, nullable=true) 
*/ 
public $path = "nophoto.jpeg"; 

/** 
* @Assert\File(maxSize="6000000") 
*/ 
private $file; 

public function setFile(UploadedFile $file = null) 
{ 
    $this->file = $file; 
    // check if we have an old image path 
    if (is_file($this->getAbsolutePath())) { 
     // store the old name to delete after the update 
     $this->temp = $this->getAbsolutePath(); 
    } else { 
     $this->path = 'initial'; 
    } 
} 

/** 
* @ORM\PrePersist() 
* @ORM\PreUpdate() 
*/ 

public function preUpload() 
{ 
    if (null !== $this->getFile()) { 
    $this->path = $this->getId().'.'.$this->getFile()->guessExtension(); 
} 

/** 
* @ORM\PostPersist() 
* @ORM\PostUpdate() 
*/ 

public function upload() 

{ 
    if (null === $this->getFile1()) {return;} 
    if (isset($this->temp)) { 
     // delete the old image 
     unlink($this->temp); 
     // clear the temp image path 
     $this->temp = null; 
    } 
// you must throw an exception here if the file cannot be moved 
// so that the entity is not persisted to the database 
// which the UploadedFile move() method does 
    $this->getFile()->move(
     $this->getUploadRootDir(), 
     $this->getId().'.'.$this->getFile()->guessExtension() 
    ); 
    $this->setFile(null); 
} 

public function getAbsolutePath() 
{ 
    return null === $this->path 
    ? null 
    : $this->getUploadRootDir().'/'.$this->getId().'.'.$this->path; 
} 
public function getFile1() 
{ 
    return $this->file; 
} 

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

protected function getUploadRootDir() 
{ 
    // the absolute directory path where uploaded 
    // documents should be saved 
    return __DIR__.'/../../../../web/'.$this->getUploadDir(); 
} 

protected function getUploadDir() 
{ 
    // get rid of the __DIR__ so it doesn't screw up 
    // when displaying uploaded doc/image in the view. 
    return 'uploads/documents'; 
} 

ответ

1

Вам нужно новое лицо, которое будет представлять собой загруженный файл со многими-к-одному (или многие-ко-многим) ассоциации к вашей организации. Это самый универсальный подход.

В качестве альтернативы вы можете хранить имена файлов в массиве, но это усложнит ваши проверки и формы.

+0

Я вижу, я попробую универсальный способ ассоциации «один-к-одному». Огромное спасибо – whitebear

Смежные вопросы