2014-11-08 3 views
2

Я использую этот комплект для загрузки файлов через форму. Это то, что я сделал. В шаблоне Twig, где я использую связкуФайлы не загружаются, а имя temp вставляется в БД, что я делаю неправильно?

<form action="{{ path('guardar-natural') }}" method="POST" class="form-horizontal" role="form" id="registroNatural" {{ form_enctype(form) }}> 
    {{ form_widget(form.documento_rif) }} 
    <button type="submit" class="btn btn-primary" id="btnEnviarRegistro">{{ 'registration.submit'|trans }}</button> 
</form> 

В классе формы:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
      ->add('documento_rif', 'vich_file', array(
       'required'  => true, 
       'mapping'  => 'recaudos', 
       'allow_delete' => true, 
       'download_link' => true, 
       'label' => false, 
      )) 
      ->add('usuario', new RegistrationForm()); 
} 

В сущности, где поле находятся:

use Symfony\Component\HttpFoundation\File\File; 
use Vich\UploaderBundle\Mapping\Annotation as Vich; 

/** 
* @Vich\Uploadable 
*/ 
class Natural 
{ 
    /** 
    * @Vich\UploadableField(mapping="recaudos", fileNameProperty="documentoRIF") 
    * @var File $imageFile 
    */ 
    protected $imageFile; 

    /** 
    * @ORM\Column(type="string", length=255, name="documento_rif", nullable=true) 
    * @var string $documentoRIF 
    */ 
    protected $documentoRIF; 

    /** 
    * @ORM\Column(type="datetime", nullable=true) 
    * @var \DateTime $updatedAt 
    */ 
    protected $updatedAt; 

    /** 
    * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image 
    */ 
    public function setImageFile(File $image = null) 
    { 
     $this->imageFile = $image; 

     if ($image) { 
      $this->updatedAt = new \DateTime('now'); 
     } 
    } 

    /** 
    * @return File 
    */ 
    public function getImageFile() 
    { 
     return $this->imageFile; 
    } 

    /** 
    * @param string $documentoRIF 
    */ 
    public function setDocumentoRIF($documentoRIF) 
    { 
     $this->documentoRIF = $documentoRIF; 
    } 

    /** 
    * @return string 
    */ 
    public function getDocumentoRIF() 
    { 
     return $this->documentoRIF; 
    } 
} 

В config.yml файле:

vich_uploader: 
    db_driver: orm # or mongodb or propel or phpcr 
    storage: vich_uploader.storage.file_system 
    mappings: 
     recaudos: 
      uri_prefix:   /recaudos 
      upload_destination: %kernel.root_dir%/../web/uploads/recaudos 
      namer:    vich_uploader.namer_uniqid 
      delete_on_update: true 
      delete_on_remove: true 

Th e bundle включен, так как я не получаю никаких ошибок, каталог имеет правильные разрешения (0755). На уровне DB, когда какие-либо записи создаются в столбце documento_rif, я получаю эту строку /tmp/php1fbjiZ вместо имени файла, что не так в моем коде?

Конечно, у меня есть больше кода на все это, но просто напишите здесь соответствующую часть.

ответ

5

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

Не связано с вашей ошибкой, но вызовет проблемы: неверный код uri_prefix, это должно быть /uploads/recaudos.

Остальное должно быть в порядке.

+0

Как насчет того, чтобы иметь более одного файла для загрузки в моей форме? Как я должен справиться с этим? Вы можете дать мне какой-то совет? – ReynierPM

2

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

->add('image', 'file', array(
    'label' => 'Image' 
)) 

Я создал кнопку отправить этот путь:

->add('submit', 'submit', array(
    'label' => 'Upload', 
)) 

Чтобы справиться с загрузки в базу данных:

if ($slidersForm->isValid()) { 
    $data = $slidersForm->getData(); 
    $fileName = $this->uploadFile($data['image']); 

    $images->setImage($fileName); 

    $em->persist($images); 
    $em->flush(); 
} 

Функция, которая загружает файл и возвращает имя файла, которое хранится в БД:

public function uploadFile(UploadedFile $uploadedFile) { 
    $kernel = $this->get('kernel'); 
    $dir = $kernel->locateResource('@MamgrowMainBundle/Resources/public/images/'); 

    $fileName = $uploadedFile->getClientOriginalName(); 
    $uploadedFile->move($dir, $fileName); //this uploads file to directory $dir you defined 

    return $fileName; 
} 

И все! Надеюсь, это как-то поможет с вашей проблемой.