O que é o StofDoctrineExtensionsBundle?
O StofDoctrineExtensionsBundle é um pacote para o framework Symfony desenvolvido pela empresa stof. Ele fornece uma coleção de extensões que adicionam funcionalidades úteis ao Doctrine, biblioteca de mapeamento objeto-relacional (ORM) utilizada no Symfony para a manipulação de dados do banco de dados. As extensões permitem desde o uso de novos tipos de dados até a automatização de tarefas comuns, como timestamps e sluggable.
Quais são as extensões disponíveis no pacote?
O pacote fornece uma coleção de extensões que cobrem diversas áreas, tais como: Sluggable, Tree, Loggable, SoftDelete, Sortable, Translatable, Timestampable, Blameable, IpTraceable, e muitas outras.
Cada uma das extensões adiciona um comportamento específico para as entidades do Doctrine e uma série de campos e métodos que facilitam seu uso, como por exemplo, o método “setSlug()”, gerado pela extensão Sluggable.
Como instalar o pacote?
O pacote pode ser instalado pelo Composer, gerenciador de pacotes do PHP. Para isso, adicione a seguinte linha no arquivo composer.json do seu projeto:
"require": { "stof/doctrine-extensions-bundle": "1.3.*" }
E em seguida execute o comando “composer update” na linha de comando para instalar o pacote. Por fim, adicione a seguinte linha ao seu arquivo config.yml:
StofDoctrineExtensionsBundleDoctrineExtensions: ~
Como usar as extensões nas minhas entidades?
Para utilizar as extensões em suas entidades, você precisa adicionar a anotação correspondente no registro da classe da entidade.Por exemplo, para utilizar a extensão Sluggable em uma entidade chamada “Produto”, você precisa adicionar a seguinte anotação acima da declaração da classe:
@GedmoMappingAnnotationSlug(fields={"nome"}, updatable=false)
Como usar a extensão Timestampable?
A extensão Timestampable adiciona os campos “createdAt” e “updatedAt” automaticamente nas entidades. Basta adicionar a anotação com o nome “Timestampable” na entidade desejada:
@GedmoMappingAnnotationTimestampable(on="create")
Como usar a extensão Loggable?
A extensão Loggable registra os valores antigos e novos de uma entidade sempre que ela é atualizada. Para isso, é necessário adicionar algumas anotações no topo da entidade, além de uma tabela para registrar os logs. Por exemplo, para registrar os logs da entidade “Produto”, faça o seguinte:
@GedmoMappingAnnotationLoggable
E depois, defina uma tabela para os logs no arquivo schema.yml:
ProdutoLog:
type: entity
gedmo:
loggable: true
Como usar a extensão Translatable?
A extensão Translatable permite a tradução dos campos de uma entidade para diversos idiomas. Para isso, é necessário adicionar a anotação “Translatable” à entidade:
@GedmoMappingAnnotationTranslatable
Com a anotação feita, adicione a seguinte configuração no arquivo config.yml:
stof_doctrine_extensions:
default_locale: en_us
translation_fallback: false
E depois execute o comando abaixo para criar as tabelas de tradução:
php bin/console doctrine:schema:update --force --em=default --dump-sql
Como usar a extensão Blameable?
A extensão Blameable adiciona campos para registrar o criador e o modificador das entidades. Para utilizar a extensão, basta adicionar a anotação “Blameable” na entidade:
@GedmoMappingAnnotationBlameable
A extensão a utiliza a autenticação do seu sistema. É necessário passar o usuário logado na hora de inserir ou modificar os registros.
Como usar a extensão SoftDelete?
A extensão SoftDelete adiciona o campo “deletedAt” na entidade, para remover registros de forma lógica. Para utilizar a extensão basta adicionar a anotação “SoftDeleteable” na entidade:
@GedmoMappingAnnotationSoftDeleteable(fieldName="deletedAt", timeAware=false)
E adicionar a seguinte configuração no arquivo config.yml:
stof_doctrine_extensions:
orm:
softdeleteable:
deletedAtFieldName: deletedAt
timeAware: false
Como usar a extensão Tree?
A extensão Tree adiciona suporte para hierarquias em árvore (ou seja, estruturas de dados em que cada elemento pode ter vários elementos filhos). Para utilizar a extensão basta adicionar a anotação “Tree” na entidade:
@GedmoMappingAnnotationTree(type="nested")
E adicionar a seguinte configuração no arquivo config.yml:
stof_doctrine_extensions:
orm:
default:
tree:
type: nested
strategy: nested
Como usar a extensão Sortable?
A extensão Sortable permite ordenar as entidades de acordo com um campo específico. Para utilizá-la, basta adicionar a seguinte anotação acima da declaração da classe:
@GedmoMappingAnnotationSortable
E dentro da classe, adicionar a seguinte anotação ao campo que será usado para ordenar:
@GedmoMappingAnnotationSortablePosition
Além disso, é preciso adicionar a seguinte configuração ao arquivo config.yml:
stof_doctrine_extensions:
orm:
default:
sortable: true