我创建了一个表单来上传图像,上传本身也在工作,但错误的值被写入了数据库。
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\Users;
use AppBundle\Service\FileUploader;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
class DefaultController extends Controller
{
public function editAction($id, Request $request, FileUploader $fileUploader){
$user = new Users();
$form = $this->createFormBuilder($listen)
->add('bild', FileType::class, array('required'=>false, 'label'=>'Bild (JPEG-Datei)', 'data_class'=>null))
->add('save', SubmitType::class, array('label'=>'Speichern', 'attr'=>array('class'=>'btn btn-primary')))
->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->get('save')->isClicked()){
$file = $form['bild']->getData();
$filename = $fileUploader->upload($file);
dump($filename);
$user->setBild($filename);
return $this->redirectToRoute('homepage');
}
}
}
服务
文件上载程序
存储在
文件上传程序。php
并具有以下代码:
<?php
namespace AppBundle\Service;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class FileUploader
{
private $targetDir;
public function __construct($targetDir) {
$this->targetDir = $targetDir;
}
public function upload(UploadedFile $file) {
$fileName = md5(uniqid()).'.'.$file->guessExtension();
$file->move($this->getTargetDir(), $fileName);
return $fileName;
}
public function getTargetDir() {
return $this->targetDir;
}
}
我还在中定义了服务
服务。yml公司
:
AppBundle\Service\FileUploader:
arguments:
$targetDir: '%file_directory%'
...并声明了变量
文件目录
在配置中。yml:
parameters:
locale: en
file_directory: '/tmp'
现在当我扔掉variabel
$filename
,我得到了我期望的值,2d504a8e0a9daba27e7baab69dc08896。以jpeg为例,但即使我使用相同的variabel将字符串保存到数据库中
$user->setBild($filename);
my db中的值示例:
/tmp/phpn7rb2i
希望你们中的一些人能帮助我克服这个问题。