【发布时间】:2019-01-06 13:21:30
【问题描述】:
我正在尝试使用本教程在我的 Symfony 项目中上传文件: http://symfony.com/doc/current/controller/upload_file.html
Symfony 没有显示错误,但是当我上传文件时没有任何反应,并且在我的数据库中而不是 filename.jpg 我有这一行 C:\wamp64\tmp\php9294.tmp
这是我的实体:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\File;
/**
* @ORM\Entity(repositoryClass="App\Repository\ItemRepository")
*/
class Item
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
* @Assert\NotBlank(message="Upload your image")
* @Assert\File(mimeTypes={ "image/png", "image/jpeg" })
*/
private $image;
public function getImage()
{
return $this->image;
}
public function setImage($image)
{
$this->image = $image;
return $this;
}
我的表格:
namespace App\Form;
use App\Entity\Item;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\FileType;
class ItemType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('image',FileType::class,array('data_class'=> null, 'label' => 'Image'))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Item::class,
));
}
}
我的控制器:
namespace App\Controller;
use App\Entity\Item;
use App\Form\ItemType;
use App\Repository\ItemRepository;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/item")
*/
class ItemController extends Controller
{
/**
* @Route("/", name="item_index", methods="GET")
*/
/**
* @Route("/new", name="item_new", methods="GET|POST")
*/
public function new(Request $request): Response
{
$item = new Item();
$form = $this->createForm(ItemType::class, $item);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$file = $item->getImage();
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
// moves the file to the directory where brochures are stored
$file->move(
$this->getParameter('brochures_directory'),
$fileName
);
$item->setImage($fileName);
return $this->redirectToRoute('item_index');
}
return $this->render('item/new.html.twig', [
'item' => $item,
'form' => $form->createView(),
]);
}
/**
* @return string
*/
private function generateUniqueFileName()
{
// md5() reduces the similarity of the file names generated by
// uniqid(), which is based on timestamps
return md5(uniqid());
}
}
我完全按照教程中的步骤进行操作,但图像似乎没有上传到我的文件夹中
【问题讨论】:
-
你是否在services.yaml中设置了参数
brochures_directory? -
@DirkJ.Faber 是的,我做到了,在这里,我这样设置:
brochures_directory: '%kernel.project_dir%/img' -
可能与您的
img文件夹的权限有关?如果您想访问该图像,我还认为您想将其放在文件夹public中。 -
表格有效吗?
-
@DirkJ.Faber 我更改了文件夹并更新了权限,现在可以使用了,谢谢!
标签: php image symfony upload symfony4