Лаб. работа “Работа с медиа контентом в Symfony”
В этой лабораторной работе мы изучим, как работать с медиа контентом в Symfony. Для этого мы создадим простое приложение, которое будет позволять пользователям загружать изображения и отображать их на странице.
Шаг 1: Установка необходимых пакетов
Для работы с медиа контентом в Symfony нам понадобятся следующие пакеты:
- Symfony Form
- Symfony Validator
- Symfony FileLoader
- Doctrine ORM
Установите эти пакеты, используя Composer:
Шаг 2: Создание сущности Image
Создайте новую сущность Image, используя команду Doctrine:
Задайте поля для сущности Image:
- id (integer, primary key, auto-increment)
- name (string, length 255)
- path (string, length 255)
- createdAt (datetime)
- updatedAt (datetime)
Создайте миграцию и обновите базу данных:
Шаг 3: Создание формы загрузки изображений
Создайте новую форму загрузки изображений, используя команду Symfony:
Задайте поля для формы ImageType:
- image (FileType, required)
Измените конфигурацию формы, чтобы она использовала сущность Image:
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('image', FileType::class, [
'required' => true,
'label' => 'Select an image',
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Image::class,
]);
}
Шаг 4: Создание контроллера для работы с изображениями
Создайте новый контроллер, используя команду Symfony:
Добавьте действие для загрузки изображений:
/**
* @Route("/images/upload", name="image_upload")
*/
public function upload(Request $request, EntityManagerInterface $entityManager): Response
{
$image = new Image();
$form = $this->createForm(ImageType::class, $image);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$file = $form['image']->getData();
$fileName = md5(uniqid()).'.'.$file->guessExtension();
$file->move($this->getParameter('images_directory'), $fileName);
$image->setName($fileName);
$image->setPath($this->getParameter('images_directory'));
$entityManager->persist($image);
$entityManager->flush();
return $this->redirectToRoute('image_index');
}
return $this->render('image/upload.html.twig', [
'form' => $form->createView(),
]);
}
Добавьте действие для отображения списка изображений:
Шаг 5: Создание шаблонов
Создайте шаблон для формы загрузки изображений:
{% extends 'base.html.twig' %}
{% block body %}
<h1>Upload an image</h1>
{{ form_start(form) }}
{{ form_row(form.image) }}
<button type="submit">Upload</button>
{{ form_end(form) }}
{% endblock %}
Создайте шаблон для отображения списка изображений:
Шаг 6: Тестирование приложения
Запустите приложение и перейдите по адресу /images/upload. Загрузите несколько изображений и убедитесь, что они отображаются на странице /images.
Дополнительные материалы: