Этот пакет обеспечивает интеграцию для DoctrineExtensions.
Особенности:
Tree- автоматизирует процесс обработки дерева и добавляет некоторые специфичные для дерева функции в хранилище. (closure,nestedsetилиmaterialized path).Translatable- дает очень удобное решение для перевода записей на разные языки.Sluggable- переводит поле в уникальный slugTimestampable- обновляет даты при создании, обновлении и даже изменении полей таблицыBlameable- обновляет строковые или ссылочные поля при создании, обновлении и даже изменении свойств со строкой или объектом.Loggable- помогает отслеживать историю изменений.Sortable- позволяет сделать любой документ или entity сортируемойSoftdeleteable- позволяет неявно удалять записиUploadable- обеспечивает обработку загрузки файлов в полях entityReference Integrity- обеспечивает ссылочную целостность для MongoDB, поддерживает аннулирование и ограничения
Установка:
composer require stof/doctrine-extensions-bundle
В результате появится файл в котором указывается конфигурация config/packages/stof_doctrine_extensions.yaml, со следующими настройками по-умолчанию:
# Read the documentation: https://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html
# See the official DoctrineExtensions documentation for more details: https://github.com/Atlantic18/DoctrineExtensions/tree/master/doc/
stof_doctrine_extensions:
default_locale: en_US
В этом файле и настраиваются необходимы расширения.
В качестве примера используем Sluggable - расширение которое отвечает за перевод какого-либо поля entity в slug. В файле config/packages/stof_doctrine_extensions.yaml допишем orm:, затем default(default относится к менеджерам entity по-умолчанию, т.к. некоторые проекты могут иметь сразу несколько менеджеров entity). И включим расширение sluggable: true
# Read the documentation: https://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html
# See the official DoctrineExtensions documentation for more details: https://github.com/Atlantic18/DoctrineExtensions/tree/master/doc/
stof_doctrine_extensions:
default_locale: en_US
orm:
default:
sluggable: true
Теперь необходимо задать настройки в файле entity(а это напомню - src/Entity/Article.php). Тут есть свойство $slug, к аннотации которого необходимо добавить @Gedmo\Slug(fields={"title"}) (это описанно в документации ), где title это имя поля из которого нужно генерировать slug.
А в подключаемых файлах не забыть подключить сам пакет use Gedmo\Mapping\Annotation as Gedmo;
/**
* @ORM\Column(type="string", length=100, unique=true)
* @Gedmo\Slug(fields={"title"})
*/
private $slug;
Добавим автоматическое генерирование времени для полей createdAt и updatedAt, ведь всегда полезно знать когда была создана та или иная запись и время последнего изменения.
В файле config/packages/stof_doctrine_extensions.yamlдобавим в конфиг timestampable: true:
stof_doctrine_extensions:
default_locale: en_US
orm:
default:
sluggable: true
timestampable: true
До этого мы уже добавили два данных поля в файле src/Entity/Article.php. Теперь необходимо расширить аннотации используя @Gedmo\Timestampable(on="create") и @Gedmo\Timestampable(on="update")
/**
* @ORM\Column(type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $createdAt;
/**
* @ORM\Column(type="datetime")
* @Gedmo\Timestampable(on="update")
*/
private $updatedAt;
Так же есть возможность для встраивания уже готового функционала
Timestampable. В классеsrc/Entity/Article.phpудалите созданные до этого поляcreatedAtиupdatedAt, а так же связанные с ними сеттеры и геттеры. Вместо них используем трейтuse TimestampableEntity;, которй находится вuse Gedmo\Timestampable\Traits\TimestampableEntity;. Данный трейт содержит точно такие же поля, геттеры и сеттеры дляcreatedAtиupdatedAt