1. O que é o StofDoctrineExtensionsBundle?
O StofDoctrineExtensionsBundle é um pacote de extensões do Doctrine para o Symfony. Ele permite a adição de comportamentos adicionais em entidades do Doctrine, como por exemplo, o gerenciamento de soft deletes, a marcação de timestamps, a geração de Uuids, entre outras funcionalidades.
2. Como instalar o StofDoctrineExtensionsBundle no Symfony?
Para instalar o StofDoctrineExtensionsBundle, basta adicionar a dependência através do Composer:
composer require stof/doctrine-extensions-bundle
Em seguida, é necessário habilitar o bundle no seu arquivo config/bundles.php:
StofDoctrineExtensionsBundleStofDoctrineExtensionsBundle::class => ['all' => true],
3. Como configurar o StofDoctrineExtensionsBundle?
Após instalar o bundle, é necessário configurá-lo no arquivo config/packages/stof_doctrine_extensions.yaml. É possível habilitar ou desabilitar as extensões desejadas, além de definir as configurações específicas de cada uma.
stof_doctrine_extensions:
default_locale: "%locale%"
orm:
default:
softdeleteable: true
timestampable: true
sluggable: true
# configurações adicionais...
4. Como usar a extensão SoftDeleteable?
Com a extensão SoftDeleteable, é possível adicionar a funcionalidade de “soft deletes” em entidades do Doctrine. Para isso, basta adicionar a anotação @GedmoSoftDeleteable na entidade, informando o nome do campo que será usado para marcar a exclusão.
use GedmoMappingAnnotation as Gedmo;
/**
* @ORMEntity
* @GedmoSoftDeleteable(fieldName="deletedAt", timeAware=false)
*/
class MinhaEntidade
{
// propriedades e métodos...
}
5. Como usar a extensão Timestampable?
A extensão Timestampable adiciona automaticamente os timestamps de criação e atualização em entidades do Doctrine. Para isso, basta adicionar as anotações @GedmoTimestampable nos campos correspondentes.
use GedmoMappingAnnotation as Gedmo;
/**
* @ORMEntity
*/
class MinhaEntidade
{
/**
* @ORMColumn(type="datetime")
* @GedmoTimestampable(on="create")
*/
private $createdAt;
/**
* @ORMColumn(type="datetime")
* @GedmoTimestampable(on="update")
*/
private $updatedAt;
// outros campos e métodos...
}
6. Como usar a extensão Sluggable?
A extensão Sluggable permite a geração automática de slugs a partir de um campo da entidade. Para isso, basta adicionar as anotações @GedmoSlug no campo desejado e definir as configurações necessárias.
use GedmoMappingAnnotation as Gedmo;
/**
* @ORMEntity
*/
class MinhaEntidade
{
/**
* @ORMColumn(type="string")
* @GedmoSlug(fields={"titulo"})
*/
private $slug;
/**
* @ORMColumn(type="string")
*/
private $titulo;
// outros campos e métodos...
}
7. Como usar a extensão Uuidable?
A extensão Uuidable permite a geração automática de Uuids para entidades do Doctrine. Para isso, basta adicionar a anotação @GedmoUuid na entidade ou no campo desejado. É possível também definir configurações específicas para a geração dos Uuids.
use GedmoMappingAnnotation as Gedmo;
/**
* @ORMEntity
* @GedmoUuid
*/
class MinhaEntidade
{
/**
* @ORMColumn(type="uuid")
* @GedmoUuid
*/
private $id;
// outros campos e métodos...
}
8. Como usar a extensão Loggable?
A extensão Loggable permite o registro de alterações em entidades do Doctrine. Para isso, basta adicionar a anotação @GedmoLoggable na entidade ou nos campos desejados. É possível também definir o comportamento do log, como por exemplo, o uso de um usuário específico, a integração com o Monolog, entre outras opções.
use GedmoMappingAnnotation as Gedmo;
/**
* @ORMEntity
* @GedmoLoggable
*/
class MinhaEntidade
{
/**
* @ORMColumn(type="string")
* @GedmoVersioned
* @GedmoLoggable
*/
private $nome;
// outros campos e métodos...
}
9. Como usar a extensão Translatable?
A extensão Translatable permite a tradução de campos em entidades do Doctrine. Para isso, basta adicionar a anotação @GedmoTranslatable no campo desejado e definir as línguas suportadas pela entidade. É possível também configurar o comportamento padrão da tradução.
use GedmoMappingAnnotation as Gedmo;
/**
* @ORMEntity
* @GedmoTranslationEntity(class="MinhaEntidadeTraducao")
*/
class MinhaEntidade
{
/**
* @ORMColumn(type="string")
* @GedmoTranslatable
*/
private $titulo;
// outros campos e métodos...
}
/**
* @ORMEntity
* @ORMTable(name="minha_entidade_translations")
*/
class MinhaEntidadeTraducao
{
/**
* @ORMColumn(type="string", length=2)
* @GedmoLocale
*/
private $locale;
/**
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMManyToOne(targetEntity="MinhaEntidade", inversedBy="translations")
* @ORMJoinColumn(name="minha_entidade_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $object;
/**
* @ORMColumn(type="string")
*/
private $titulo;
// outros campos e métodos...
}
10. Como usar a extensão Tree?
A extensão Tree permite a criação de árvores hierárquicas em entidades do Doctrine. Para isso, basta adicionar a anotação @GedmoTree na entidade e definir o campo que será usado para armazenar o nível na árvore.
use GedmoMappingAnnotation as Gedmo;
/**
* @ORMEntity
* @GedmoTree(type="nested")
*/
class MinhaEntidade
{
/**
* @ORMColumn(type="string")
*/
private $nome;
/**
* @GedmoTreeLeft
* @ORMColumn(type="integer")
*/
private $lft;
/**
* @GedmoTreeLevel
* @ORMColumn(type="integer")
*/
private $lvl;
/**
* @GedmoTreeRight
* @ORMColumn(type="integer")
*/
private $rgt;
/**
* @GedmoTreeRoot
* @ORMColumn(type="integer", nullable=true)
*/
private $root;
// outros campos e métodos...
}