2014-11-08 2 views
2

양식을 통해 파일을 업로드 할 때이 번들을 사용하고 있습니다. 이것이 내가 한 일이다. 나뭇 가지 템플릿에서 어디 폼 클래스에 번들파일이 업로드되지 않고 DB에 임시 이름이 삽입되었는데 잘못 했습니까?

<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> 

을 사용하고 있습니다 :

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 파일에서 : 필드가있는 엔티티에서

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()); 
} 

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 전자 번들은 어떤 오류도 발생하지 않기 때문에 사용 가능합니다. 디렉토리에 올바른 권한 (0755)이 있습니다. DB 레벨에서 어떤 레코드가 documento_rif 컬럼에 생성 될 때 나는이 문자열 /tmp/php1fbjiZ 대신 파일 이름을 얻습니다. 내 코드에서 무엇이 잘못 되었습니까?

물론이 코드에는 더 많은 코드가 있지만 관련 부분은 여기에 작성하십시오.

답변

5

양식 유형에서 파일 이름 열 (documento_rif) 대신 업로드 할 수있는 입력란 (imageFile)을 참조해야합니다.

버그에 연결되어 있지 않지만 문제가 발생할 수 있습니다. 매핑에 정의 된 uri_prefix이 잘못되었습니다. /uploads/recaudos이어야합니다.

나머지는 괜찮을 것입니다.

+0

내 양식에 두 개 이상의 업로드 파일이 있습니까? 어떻게 처리해야합니까? 조언 좀 해줄 수 있니? – ReynierPM

2

내가 업로드 이미지가 몇 시간 전에 형성이 도움이 될 만든 :

->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(); 
} 

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

내가 버튼이 방법을 제출 생성

파일을 업로드하고 DB에 저장된 파일 이름을 반환하는 기능 :

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; 
} 

그리고 그게 전부입니다! 어떻게 든 당신의 문제에 도움이되기를 바랍니다.