Laravel: Instanciando classes like a boss
Outro dia estava eu e um amigo do trabalho conversando. Estávamos debatendo algumas implementações que cada um gosta de usar em conjunto com o Laravel.
Eis que ele tinha um problema que não conseguia instanciar as classes de forma que o próprio Service Container do Laravel resolvesse as Dependências a serem injetadas.
Dois dias depois estou revisando minha implementação do padrão Repository que gosto de usar com o Laravel. E além do já citado padrão também precisei implementar uma Factory, oras vejam só quem estava exatamente com o mesmo problema do meu amigo…
É, pois é, aparentemente não é nada incomum isso acontecer, mas para tudo temos uma solução.
class MyFactory
{
private static $products = [
'product1' => Product1::class,
'product2' => Product2::class,
'product3' => Product3::class, ]; public static function make(string $name)
{
if (array_has(self::$products, $name)) {
return resolve(self::$products[$name]);
} throw new RepositoryException("Product {$name} not found in this factory.");
}}
O grande “pulo do gato” aqui é o uso da função helper do Laravel chamada resolve()
ela simplesmente resolve todas as dependências a serem injetadas e instância a sua classe, da hora né?
Isso aí pessoal por hoje é só, apenas uma dica rápida e um lembrete de que precisamos extrapolar o framework… até a próxima. 😎
Por favor, não deixem de compartilhar, comentar e deixar seu feedback.
Referências