📅  最后修改于: 2020-10-19 03:19:37             🧑  作者: Mango
Symfony Form组件提供FileType类来处理文件输入元素。它可以轻松上传图像,文档等。让我们学习如何使用FileType功能创建简单的应用程序。
步骤1-使用以下命令创建一个新应用程序fileuploadsample 。
symfony new fileuploadsample
步骤2-创建一个实体Student ,具有名称,年龄和照片,如以下代码所示。
name;
}
public function setName($name) {
$this->name = $name;
return $this;
}
public function getAge() {
return $this->age;
}
public function setAge($age) {
$this->age = $age;
return $this;
}
public function getPhoto() {
return $this->photo;
}
public function setPhoto($photo) {
$this->photo = $photo;
return $this;
}
}
在这里,我们为照片属性指定了文件。
步骤3-创建学生控制器StudentController和一个新方法addAction,如以下代码所示。
createFormBuilder($student)
->add('name', TextType::class)
->add('age', TextType::class)
->add('photo', FileType::class, array('label' => 'Photo (png, jpeg)'))
->add('save', SubmitType::class, array('label' => 'Submit'))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$file = $student->getPhoto();
$fileName = md5(uniqid()).'.'.$file->guessExtension();
$file->move($this->getParameter('photos_directory'), $fileName);
$student->setPhoto($fileName);
return new Response("User photo is successfully uploaded.");
} else {
return $this->render('student/new.html.twig', array(
'form' => $form->createView(),
));
}
}
}
在这里,我们为学生实体创建了表格并处理了请求。当用户提交表单并且表单有效时,我们便使用photos_directory参数将上载的文件移至了上载目录。
步骤4-使用以下表单标记创建视图new.html.twig 。
{% extends 'base.html.twig' %}
{% block javascripts %}
{% endblock %}
{% block stylesheets %}
{% endblock %}
{% block body %}
Student form
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{% endblock %}
步骤5-如下所示,在参数配置文件中设置参数photos_directory 。
parameters: photos_directory: '%kernel.root_dir%/../web/uploads/photos'
步骤6-现在,运行应用程序并打开http:// localhost:8000 / student / new并上传照片。上传的照片将被上传到photos_directory,并显示一条成功消息。