Файлы не загружаются и временное имя вставляется в БД, что я делаю не так?

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

<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

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

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

2

Решение

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

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

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

5

Другие решения

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

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

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

2

По вопросам рекламы [email protected]