(16) 981791110 contato@policast.studio

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...
}