2016-04-19 6 views
2

Ich versuche das VichImageBundle mit Symfony3 zu verwenden, für den Aufruf von FormType :: class gibt es noch keine Dokumentation, die in Verbindung mit dem Vich Image Bundle neu in S3 ist. Ich habe alles außer dem beweglichen Teil.Symfony 3 VichUploaderBundle verschiebe Bilder nicht in das richtige Verzeichnis

ich eine Ordnerstruktur hier innerhalb des Projekts hier gemacht haben: web/images/aod_images

ich die Konfiguration in der yml Datei wie folgt festgelegt haben:

vich_uploader: 
    db_driver: orm 

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

Die Entitätseigenschaften befinden sich hier: (ich habe die Getter und Setter an Ort und Stelle)

/** 
* @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; 

ich bin eine Menge Zeit Verfahren entsprechend in der Controller-Klasse aufrufen, und zwar auf der editAction und der Newac tion-Controller:

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

In der Klasse Formtype für diese Entität Ich habe weit folgend so:

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

Ich bin nicht sicher, welche Optionen für die passieren -> Methode noch für jedes Bild hinzufügen Beispiel.

Die Anwendung erstellt die Formulare korrekt.

Wenn ich eine tail -f die dev.log ich die folgende Meldung als Teil des doctrine.DEBUG Kanal:

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

Der Bildname-Eigenschaft nicht, was ich in der Config abgebildet überein .yml-Datei. Stattdessen spiegelt der Pfad die Route meiner lokalen Maschine zum internen php tmp-Verzeichnis wider. Ich benutze diesen Befehl von 127.0.0.1:8000 nachdem ich den Befehl server: run benutzt habe.

Wenn ich in dieses Verzeichnis schauen, hat das Bild NICHT wurde dorthin bewegt.

Der (falsche) Bildname wird in die Datenbank kopiert. Der Pfad zum Bild ist jedoch leer (falscher Pfad). Außerdem ist der richtige Pfad/Verzeichnis ebenfalls leer.

Grüße!

EDIT

Gemäß Vorschlag von Matteo ich die folgende Änderung Datei auf den FormType.php gemacht haben.

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

EDIT 2

In einem Versuch, meine Implementierung zu machen enger an die Dokumentation ich meinen updatedAt innerhalb des Unternehmens festgelegt gemäß docs Vorschlag gestellt zu halten.

Meine Set-Methoden in etwa so aussehen:

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

ich mit einem vollständigen Pfad explizit festgelegt typehinting. Jetzt erhalte ich den folgenden Fehler.

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

überprüfen Sie, ob Sie Ihre c korrekt beschriften Lass dich mit der 'Uploadable' Annotation wie hier [hier] beschrieben (https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/usage.md#step-2-link-the-upload-mapping-to -eine-Entität). Ich denke, Sie tun, ist nur ein Scheck – Matteo

+1

ja, ich habe sicher, dass ... @Vich \ UploadableField (Zuordnung = "aod_images", fileNameProperty = "twoohourChartName"). Ich habe diesen Teil direkt von der Seite übernommen, mit der Sie verlinkt haben. Ich habe nur überprüft, dass meine Zuordnungen hier in der Entität denen in der Konfigurationsdatei entsprechen. Es passt perfekt zusammen. –

+0

/** * @ORM \ Entity * @Vich \ Uploadable */ Klasse Produkt – Matteo

Antwort

2

Für die Verwendung dieses Bündel mit symfony3 Sie den Formulartyp verwenden müssen: VichFileType wie im doc here beschrieben, wie zB:

// ... 
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 
    )); 
} 

Also versuchen Sie dies in Ihrer Formtype Klasse:

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

Ich hoffe, diese Hilfe

+0

Ich habe alle Änderungen vorgenommen, wie Sie und die Dokumentation vorgeschlagen. Auf VichFileType :: class umgeschaltet und die entsprechende USE-Anweisung eingefügt. Ich habe auch das vich-Formular-Thema aktiviert, da die Dokumentation, die Sie verlinkt haben, vorschlägt. Ich bekomme immer noch das gleiche Verhalten. Immer noch dieselbe Dokumentinformation in der Protokolldatei mit dem Pfad des gespeicherten Bildes. Am falschen Ort. Und wenn ich in das Verzeichnis schaue, wurde das Bild nicht wirklich verschoben(). –

+0

Ich habe den Setter-Methoden den updateAt-Code hinzugefügt und Typhinweise hinzugefügt, wie von der Dokumentation vorgeschlagen, jetzt erhalte ich einen Typfehler. Ich habe es nicht über eine Bearbeitung in meinem OP gemacht –

+0

hi @RickMason ich sehe dein Update. Im Handbuch [usage] (https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/usage.md) ist die Methode der Datei eine einfache Datei anstelle von UploadedFile als Ihr Setter. – Matteo

Verwandte Themen