Видео актуально для Symfony 7

Где создаются и хранятся сущности

Давайте создадим первую сущность в нашем проекте. Подробнее о том, что такое сущности в Symfony и зачем они нужны, мы говорили ранее. Если открыть папку src/entity. В этой папке по умолчанию хранятся те сущности, которые можно использоваться в нашем проекте. 

Если мы перейдем в папку doctrine/packages/doctrine.yaml мы можем там увидеть такую настройку, как orm. Какие классы в нашем проекте, каким таблицам должны соответствовать. И если мы посмотрим, то должны увидеть здесь путь до нашей директории Entity.

orm/mappings/App/dir: '%kernel_project_dir%/src/Entity'

Благодаря этой настройке Symfony узнает, что в папке Entity у нас хранятся те сущности, которые должны соответствовать структуре таблиц в базе данных. Вы можете здесь поменять эту настройку и сущности вашего проекта будут храниться в другой папке.

Процесс создания сущности

Мы можем вручную создать внутри папки src/entity какие-то php классы, которые будут являться сущностям базы данных. Но, для начала, рекомендую вам воспользоваться так называемым maker bundle. Мы установили его в предыдущих видео. Он позволяет в автоматическом режиме генерировать те сущности, которые будут в таблицах базы данных.

Чтобы это сделать, нам нужно воспользоваться командой

php bin/console make:entity

Это команда, которая позволяет создать нам новую сущность. Обратите внимание, что эта возможность работает только если у вас включен режим разработки dev. В режиме prod, maker bundle не работает.

У нас откроется диалоговое окно, в котором мы можем прописать те настройки сущности, которые мы хотим создать. Давайте создадим сущность Page.

Что собой представляют сущности

Имена сущностей начинаются с большой буквы и указываются в единственном числе. Page относиться к страницам, которые будут в нашем проекте, user - пользователям, которые будут на нашем сайте.

Желательно называть сущности на английском языке.

Такие существуют правила хорошего тона.

Сущность представляет собой обычный PHP класс, который содержит некоторые свойства: приватные свойства и публичные методы, которые мы можем использовать. Все свойства являются приватным в сущности, а методы являются публичными. 

Общаться с сущностью мы можем с помощью методов, которые могут либо что-то записать и изменить в этой сущности, либо что-то получить из этой сущности. 

Кроме того, в папке Repository, у нас был создан PageRepository. 

Репозиторий - переводиться как хранилище. Для каждой таблицы создается некий специальный класс репозитория, который и позволяет нам выполнять запросы к этому хранилищу. 

Здесь есть некие методы по умолчанию, но также вы можете прописать здесь какие-то свои методы, которые будут позволять вам обращаться к этой таблице, получать оттуда какие-то данные, добавлять или обновлять данные. Как правило, здесь пишутся какие-то кастомные запросы к этой таблице, чтобы можно было получать оттуда какую-то кастомную информацию и использовать ее в проекте.

Если над свойством сущности стоит такая форма записи:

#[ORM\Column(...)]

Это означает то, что в нашей таблице есть такая колонка, которая называется также как текущее свойство и имеет тип данных, как указано в настройках этого поля. 

Благодаря атрибуту: 

#[ORM\Entity(repositoryClass: PageRepository::class)]

Symfony понимает, что имеет дело с сущность и у этой сущности есть связь с репозиторем PageRepository.

Таким образом вы можете сгенерировать сущность Entity в вашем Symfony проекте, хотя это можно не генерировать и написать все вручную.