Foi lançado o desafio para implementarmos um repositório com o Doctrine.
Fiz a Criação de uma fábrica do EntityManager que apontava para os mapeamentos das entidades em XML, conforme o proposto. Entendi que essa sugestão era devido não termos nenhuma associação das classes do domínio com a implementação da infraestrutura.
Mas quando fui criar testes para esse repositório, descobri que a minha infraestrutura estava afetando meu domínio... Em Aluno
foi definido que ele iria possuir uma lista de telefones, logo uma array no PHP. Porém ao utilizar o Doctrine, obtive um erro pois ele tentava colocar um objeto do tipo PersistentCollection
em uma propriedade do tipo array, no caso isso sera os telefones.
E isso faz sentido, quando se trata de coleções, o Doctrine utiliza suas próprias classes para representar. Mas como meu domínio deve estar a parte da infraestrutura, estou utilizando a array do PHP para representar listas.
Como estou utilizando já o PHP 8, estou tipando minhas propriedades, logo recebo esses erros.
Como contornar esse tipo de ação? Visto que com o Doctrine eu não faço o preenchimento dos objetos manualmente como faria com o PDO, o próprio ORM preenche tudo por Reflection.
Seria necessário fazer uma gambiarra com o uso de métodos mágicos? Ex: utilizar o __set
para interceptar tal ação e transformar as coleções em arrays.