我还在学习 Symfony2 并且不明白如何上传文件。
别担心,我已经检查了文档。这真的很好,但我的问题没有在任何教程中解释。
我正在寻找有关如何使用 Symfony2 上传文件的指导,但具有每个人都需要的所有内容(例如扩展名的约束、基于 id 和内容的文件重命名、将路径存储在数据库中等...)
我找到了很好的教程,尝试将它们混合但没有成功。每次出现不同的问题:每次提交表单时都会重新上传文件(即使文件字段为空),guessExtension 无法使用,tmp 路径存储在数据库中而不是正确的路径,文件没有移动,不可能在重命名中使用了 id,因为 id 是自动递增的,因此尚未生成)。
所以,我会放一个“标准”实体,比如说:Photo.php
/**
* Photo
*
* @ORM\Table(name="photo")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class Photo
{
// Annotation for the id and auto increment etc
private $id;
/**
* @var string
* @Assert\File( maxSize = "3072k", mimeTypesMessage = "Please upload a valid Image")
* @ORM\Column(name="image", type="string", length=245, nullable=false)
*/
private $image
private $title
private $description
// all the function get, set for the 4 previous variables
}
和控制器:
public function addPhotoAction()
{
$add_photo = new Photo;
$formBuilderPhoto = $this->createFormBuilder($add_photo);
$formBuilderPhoto
->add('title','text',array('label' => 'Title of the photo', 'required' => true))
->add('image','file', array('required' => true, 'data_class' => null))
->add('description','textarea',array('label' => 'Description of your photo', 'required' => false))
;
$form_photo = $formBuilderPhoto->getForm();
if ($request->getMethod() == 'POST') {
$form_photo->bind($request);
if ($form_photo->isValid()) {
// ...
}
}
return $this->render('MyBundle:frontend:photo.html.twig',
array('form_photo' => $form_photo->createView())
);
}
您现在知道要添加哪些“重要”功能才能上传照片并重命名吗?
您如何检查扩展程序以查看是否可以上传?
你用 Symfony2 做这样的事情的实际方法是什么?我知道有很多 Bundle 可以为你做所有这些事情,但我想学习如何去做并理解这个过程。
用 Symfony2 实现文件上传表单和重命名功能的“经典”方法是什么?