2016-03-07 2 views
1

У меня есть объект File для загрузки файлов файлов в другие объекты (новости/блог/etc).Как ввести переменную в объекте отношения OneToOne

Я указываю на него с отношением OneToOne, и он отлично работает. Но я хотел бы изменить реж загрузки для каждого соотношения объекта:

загрузки/новости
загрузки/блог

Путь загрузки устанавливается в моем файле сущности, так что я не знаю, как автоматически обновлять путь Foreach отношения ...
у вас есть идея о том, как это сделать?
Thanks

+0

Пожалуйста, покажите определение вашей файловой сущности – LBA

+2

это не поможет вам. ^^ @ORM \ OneToOne (targetEntity = "File", cascade = {"persist"}) – arno

+0

Вы не можете связать атрибут с Ассоциацией OneToOne, поэтому либо вы сохраняете свой путь с вашим файловым сущностью (который является targetEntity, и вы его не показывали), либо вы разрешаете свою ассоциацию к OneToMany/ManyToOne, где у вас могут быть атрибуты вашей ассоциации, например, например, ваш путь - но я не вижу в этом никакого смысла. – LBA

ответ

0

Конечно, вы можете это сделать. На вашей стороне объекта файла, вы можете добавить атрибут UploadDir и создать сеттер так:

private $uploadDir; 

public function setUploadDir($uploadDir) 
{ 
    if (!$this->uploadDir) { 
     $this->uploadDir = $uploadDir; 
    } 
} 

Ваш комментарий рекомендуем вам использовать Symfony с Доктрина права?

Таким образом, вы можете изменить метод классического getUploadDir(), как это:

protected function getUploadDir() 
{ 
    return 'uploads/' . $this->uploadDir; 
} 

В сущности «родительской» вы должны обновить этот атрибут (при его создании), прежде чем сохраняться или обновить.

(я лично использую жизненный цикл обратный вызов, но вы можете сделать это вручную в контроллере)

use Doctrine\ORM\Mapping as ORM; 
/** 
* News 
* 
* @ORM\Table(name="News") 
* @ORM\HasLifecycleCallbacks 
*/ 
class News 
{ 
    //.... 

/** 
* @ORM\OneToOne(targetEntity="File",cascade={"persist","remove"}) 
*/ 
private $file; 

/** 
* @ORM\PrePersist() 
* @ORM\PreUpdate() 
*/ 
function setUploadDir() 
{ 
    $this->getFile()->setUploadDir('news'); 
} 
// .... 

Вы также можете добавить константу, чтобы сделать уборщик кода ... Я надеюсь, что это поможет

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