Um componente poderoso e flexível de transformação de dados para PHP, parte do Framework KaririCode. Ele usa transformação baseada em atributos com processadores configuráveis para garantir transformação e formatação consistente de dados em suas aplicações.
- Funcionalidades
- Instalação
- Uso
- Transformadores Disponíveis
- Configuração
- Integração com Outros Componentes KaririCode
- Desenvolvimento e Testes
- Contribuindo
- Licença
- Suporte e Comunidade
- Transformação baseada em atributos para propriedades de objetos
- Conjunto abrangente de transformadores integrados para casos de uso comuns
- Fácil integração com outros componentes KaririCode
- Processadores configuráveis para lógica de transformação personalizada
- Arquitetura extensível permitindo transformadores personalizados
- Tratamento e relatório de erros robusto
- Pipeline de transformação encadeável para transformação complexa de dados
- Suporte integrado para múltiplos cenários de transformação
- Transformação type-safe com recursos do PHP 8.3
- Preservação dos tipos de dados originais
- Opções flexíveis de formatação para vários tipos de dados
Você pode instalar o componente Transformer via Composer:
composer require kariricode/transformer
- PHP 8.3 ou superior
- Composer
- Extensões:
ext-mbstring
,ext-json
- Defina sua classe de dados com atributos de transformação:
use KaririCode\Transformer\Attribute\Transform;
class FormatadorDeDados
{
#[Transform(
processors: ['date' => ['inputFormat' => 'd/m/Y', 'outputFormat' => 'Y-m-d']]
)]
private string $data = '25/12/2024';
#[Transform(
processors: ['number' => ['decimals' => 2, 'decimalPoint' => ',', 'thousandsSeparator' => '.']]
)]
private float $preco = 1234.56;
#[Transform(
processors: ['mask' => ['type' => 'phone']]
)]
private string $telefone = '11999887766';
// Getters e setters...
}
- Configure o transformador e use-o:
use KaririCode\ProcessorPipeline\ProcessorRegistry;
use KaririCode\Transformer\Transformer;
use KaririCode\Transformer\Processor\Data\{DateTransformer, NumberTransformer};
use KaririCode\Transformer\Processor\String\MaskTransformer;
$registry = new ProcessorRegistry();
$registry->register('transformer', 'date', new DateTransformer());
$registry->register('transformer', 'number', new NumberTransformer());
$registry->register('transformer', 'mask', new MaskTransformer());
$transformer = new Transformer($registry);
$formatador = new FormatadorDeDados();
$resultado = $transformer->transform($formatador);
if ($resultado->isValid()) {
echo "Data: " . $formatador->getData() . "\n"; // Saída: 2024-12-25
echo "Preço: " . $formatador->getPreco() . "\n"; // Saída: 1.234,56
echo "Telefone: " . $formatador->getTelefone() . "\n"; // Saída: (11) 99988-7766
}
Aqui está um exemplo de como usar o Transformer KaririCode em um cenário do mundo real, demonstrando várias capacidades de transformação:
use KaririCode\Transformer\Attribute\Transform;
class TransformadorDeDadosComplexos
{
#[Transform(
processors: ['case' => ['case' => 'snake']]
)]
private string $texto = 'transformarEsteTextoParaSnakeCase';
#[Transform(
processors: ['slug' => []]
)]
private string $titulo = 'Este é um Título para URL!';
#[Transform(
processors: ['arrayKey' => ['case' => 'camel']]
)]
private array $dados = [
'nome_usuario' => 'João Silva',
'endereco_email' => 'joao@exemplo.com.br',
'numero_telefone' => '1234567890'
];
#[Transform(
processors: [
'template' => [
'template' => 'Olá {{nome}}, seu pedido #{{numero_pedido}} está {{status}}',
'removeUnmatchedTags' => true,
'preserveData' => true
]
]
)]
private array $dadosTemplate = [
'nome' => 'João',
'numero_pedido' => '12345',
'status' => 'concluído'
];
// Getters e setters...
}
-
CaseTransformer: Transforma o caso da string (camel, snake, pascal, kebab).
- Opções de Configuração:
case
: Formato do caso alvo (lower, upper, title, sentence, camel, pascal, snake, kebab)preserveNumbers
: Se deve preservar números na transformação
- Opções de Configuração:
-
MaskTransformer: Aplica máscaras a strings (telefone, CPF, CNPJ, etc.).
- Opções de Configuração:
mask
: Padrão de máscara personalizadotype
: Tipo de máscara predefinidoplaceholder
: Caractere de placeholder da máscara
- Opções de Configuração:
-
SlugTransformer: Gera slugs amigáveis para URL.
- Opções de Configuração:
separator
: Caractere separadorlowercase
: Converter para minúsculasreplacements
: Substituições de caracteres personalizadas
- Opções de Configuração:
-
TemplateTransformer: Processa templates com substituição de variáveis.
- Opções de Configuração:
template
: String do templateremoveUnmatchedTags
: Remove placeholders não correspondidospreserveData
: Mantém dados originais no resultado
- Opções de Configuração:
-
DateTransformer: Converte entre formatos de data.
- Opções de Configuração:
inputFormat
: Formato de data de entradaoutputFormat
: Formato de data de saídainputTimezone
: Fuso horário de entradaoutputTimezone
: Fuso horário de saída
- Opções de Configuração:
-
NumberTransformer: Formata números com configurações específicas de localidade.
- Opções de Configuração:
decimals
: Número de casas decimaisdecimalPoint
: Separador decimalthousandsSeparator
: Separador de milharesroundUp
: Arredondar decimais para cima
- Opções de Configuração:
-
JsonTransformer: Lida com codificação/decodificação JSON.
- Opções de Configuração:
encodeOptions
: Opções de codificação JSONpreserveType
: Mantém tipo de dado originalassoc
: Usa arrays associativos
- Opções de Configuração:
-
ArrayFlattenTransformer: Achata arrays aninhados.
- Opções de Configuração:
depth
: Profundidade máxima para achatarseparator
: Separador de chaves para estrutura achatada
- Opções de Configuração:
-
ArrayGroupTransformer: Agrupa elementos do array por chave.
- Opções de Configuração:
groupBy
: Chave para agruparpreserveKeys
: Mantém chaves originais
- Opções de Configuração:
-
ArrayKeyTransformer: Transforma chaves do array.
- Opções de Configuração:
case
: Caso alvo para chavesrecursive
: Aplicar a arrays aninhados
- Opções de Configuração:
-
ArrayMapTransformer: Mapeia chaves do array para nova estrutura.
- Opções de Configuração:
mapping
: Configuração de mapeamento de chavesremoveUnmapped
: Remove chaves não mapeadasrecursive
: Aplicar a arrays aninhados
- Opções de Configuração:
-
ChainTransformer: Executa múltiplos transformadores em sequência.
- Opções de Configuração:
transformers
: Array de transformadores para executarstopOnError
: Para cadeia no primeiro erro
- Opções de Configuração:
-
ConditionalTransformer: Aplica transformações baseadas em condições.
- Opções de Configuração:
condition
: Callback de condiçãotransformer
: Transformador a aplicardefaultValue
: Valor quando condição falha
- Opções de Configuração:
Transformadores podem ser configurados globalmente ou por instância. Exemplo de configuração do NumberTransformer:
use KaririCode\Transformer\Processor\Data\NumberTransformer;
$numberTransformer = new NumberTransformer();
$numberTransformer->configure([
'decimals' => 2,
'decimalPoint' => ',',
'thousandsSeparator' => '.',
]);
$registry->register('transformer', 'number', $numberTransformer);
O componente Transformer integra-se com:
- KaririCode\Contract: Fornece interfaces para integração de componentes
- KaririCode\ProcessorPipeline: Usado para pipelines de transformação
- KaririCode\PropertyInspector: Processa atributos de transformação
Exemplo completo de configuração do registro:
$registry = new ProcessorRegistry();
// Registrar Transformadores de String
$registry->register('transformer', 'case', new CaseTransformer())
->register('transformer', 'mask', new MaskTransformer())
->register('transformer', 'slug', new SlugTransformer())
->register('transformer', 'template', new TemplateTransformer());
// Registrar Transformadores de Dados
$registry->register('transformer', 'date', new DateTransformer())
->register('transformer', 'number', new NumberTransformer())
->register('transformer', 'json', new JsonTransformer());
// Registrar Transformadores de Array
$registry->register('transformer', 'arrayFlat', new ArrayFlattenTransformer())
->register('transformer', 'arrayGroup', new ArrayGroupTransformer())
->register('transformer', 'arrayKey', new ArrayKeyTransformer())
->register('transformer', 'arrayMap', new ArrayMapTransformer());
Configuração de desenvolvimento similar ao componente Validator, usando Docker e comandos Make.
make up
: Iniciar serviçosmake down
: Parar serviçosmake test
: Executar testesmake coverage
: Gerar relatório de coberturamake cs-fix
: Corrigir estilo de códigomake quality
: Executar verificações de qualidade
Contribuições são bem-vindas! Por favor, veja nosso Guia de Contribuição.
Licença MIT - veja arquivo LICENSE.
- Documentação: https://kariricode.org/docs/transformer
- Issues: GitHub Issues
- Fórum: Comunidade KaririCode Club
- Stack Overflow: Marque com
kariricode-transformer
Feito com ❤️ pela equipe KaririCode. Transformando dados com elegância e precisão.