2016-04-19 2 views
2

Я пытаюсь использовать VichImageBundle с Symfony3, пока еще нет документации для вызова типа FormType :: class, который является новым для S3 в сочетании с Vich Image Bundle. У меня все работает, кроме движущейся части.Symfony 3 VichUploaderBundle не перемещает изображения в правильный каталог

Я сделал структуру папок здесь внутри проекта здесь: Web/изображения/aod_images

Я установил конфигурацию в файле YML так:

vich_uploader: 
    db_driver: orm 

    mappings:  
     aod_images: 
      uri_prefix:   /images/aod_images 
      upload_destination: %kernel.root_dir%/../web/images/aod_images 

Свойство сущности здесь: (у меня есть методы получения и установки на месте)

/** 
* @Vich\UploadableField(mapping="aod_images", fileNameProperty="dailyChartName") 
* 
* @var File 
*/ 
private $dailyChart; 

/** 
* @ORM\Column(type="string", length=255) 
* 
* @var string 
*/ 
private $dailyChartName; 

/** 
* @Vich\UploadableField(mapping="aod_images", fileNameProperty="twohourChartName") 
* 
* @var File 
*/ 
private $twohourChart; 

/** 
* @ORM\Column(type="string", length=255) 
* 
* @var string 
*/ 
private $twohourChartName; 

Я вызываю метод установки времени по мере необходимости в классе контроллера, а именно на editAction и newAc Контроллеры Тион:

$analysis->setUpdatedAt(new \DateTime('now')); 

В классе FormType для этого объекта я следующий до сих пор:

->add('dailyChartName', FileType::class, array()) 
->add('twohourChartName', FileType::class, array()) 

Я не уверен, что варианты перейти к -> добавить метод еще для каждого изображения пример.

Приложение правильно строит формы.

Когда я делаю хвост -f в dev.log я получаю следующее сообщение как часть канала doctrine.DEBUG:

(Symfony\\Component\\HttpFoundation\\File\\UploadedFile: /Applications/MAMP/tmp/php/phpEz6kJO)","13":"[object] (Symfony\\Component\\HttpFoundation\\File\\UploadedFile: /Applications/MAMP/tmp/php/phpVkbZgi) 

Свойство Имя изображения не соответствует тому, что я отображается в конфигурации .yml-файл. Вместо этого путь отражает путь моих локальных машин к внутренней директории php tmp. Я запускаю это с 127.0.0.1:8000 после использования команды server: run.

Когда я смотрю в этом каталоге, изображение было перемещено NOT.

Имя (неправильное) изображение копируется в базу данных. Однако путь к изображению пуст (неправильный путь). Кроме того, правильный каталог path/также пуст.

С уважением!

EDIT

По предложению Маттео я сделал следующие изменения в файл FormType.php.

->add('dailyChart', VichFileType::class, array(
      'required' => TRUE, 
     )) 
->add('twohourChart', VichFileType::class, array(
      'required' => TRUE,    
     )) 

EDIT 2

В попытке сделать мою реализацию более тесно прилипать к документации, которую я кладу updatedAt установить внутри объекта в соответствии с DOCS предложение.

Мои набор методов выглядеть примерно так:

public function setDailyChart(\Symfony\Component\HttpFoundation\File\UploadedFile $dailyChart) 
{ 
    $this->dailyChart = $dailyChart; 
     if ($dailyChart) { 
      $this->updatedAt = new \DateTime('now'); 
     } 
    return $this; 
} 

я явно установить typehinting с полным путем. Теперь я получаю следующую ошибку.

AppBundle\Entity\MTI_Cart\AodTechnicalAnalysis::setDailyChart() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, instance of Symfony\Component\HttpFoundation\File\File given 
+0

проверить, правильно ли вы указали свой c lass с аннотацией «Загружаемый», как описано [здесь] (https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/usage.md#step-2-link-the-upload-mappingtoto -an-объект). Я думаю, что вы делаете, это всего лишь проверка – Matteo

+1

Да, я убедился в этом ... @Vich \ UploadableField (mapping = "aod_images", fileNameProperty = "twohourChartName"). Я взял эту часть непосредственно со страницы, с которой вы связались. Я просто дважды проверил, что мои сопоставления здесь, на сущности, соответствуют этому в файле конфигурации. Он идеально подходит. –

+0

/**/** * @ORM \ Entity * @Vich \ Загружаемый */ Класс Продукт – Matteo

ответ

2

Для использования этого пучка с symfony3 вы должны использовать тип формы: VichFileType, как описано в док here, как пример:

// ... 
use Vich\UploaderBundle\Form\Type\VichFileType; 

// ... 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    // ... 

    $builder->add('image', VichFileType::class, array(
     'required'  => false, 
     'allow_delete' => true, // not mandatory, default is true 
     'download_link' => true, // not mandatory, default is true 
    )); 
} 

Так попробуйте это в своем классе formType:

use Vich\UploaderBundle\Form\Type\VichFileType; 
//.. 
->add('dailyChartName', VichFileType::class, array()) 
->add('twohourChartName', VichFileType::class, array()) 

Надеюсь, что эта помощь

+0

Я внесла все изменения, поскольку вы и предлагаемая документация. Переключился в класс VichFileType :: и привел соответствующий оператор USE. Я также включил тему формы vich, как указывает документация, с которой вы ссылались. Я по-прежнему получаю такое же поведение. Все еще одно и то же сообщение доктрины в файле журнала с сохраненным контуром изображения. Не в том месте. И когда я смотрю в каталог, изображение фактически не перемещается(). –

+0

Я добавил код updateAt методам setter и добавил намеки типа в соответствии с предложением документов, теперь я получаю ошибку типа. Я не сделал этого с помощью редактирования в своем OP –

+0

Привет @RickMason я вижу ваше обновление. В руководстве [usage] (https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/usage.md) метод файла представляет собой простой файл, а не UploadedFile как ваш установщик. – Matteo

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