Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Função Provides do DeferrableProvider para Atributo Bindings

Olá, não consegui obter essa informação na documentação do Laravel, então tive que apelar para o ChatGPT e não sei se está correta a implementação.

Gostaria de adiantar o carregamento do meu RepositoriesProvider, que como mostrado no vídeo, está apenas realizando bindings, mas como eu estou utilizando os bindings via atributo, gostaria de saber como eu utilizo eles no método Provides da interface DeferrableProvider?

A solução abaixo, foi pega do ChatGPT, poderiam me confirmar se está correta ou se teria uma forma melhor de fazer isso?

Agradeço desde já

<?php

namespace App\Providers;

use App\Repositories\SeriesRepository;
use Illuminate\Support\ServiceProvider;
use App\Repositories\EloquentSeriesRepository;
use Illuminate\Contracts\Support\DeferrableProvider;

class RepositoriesProvider extends ServiceProvider implements DeferrableProvider
{
    public $bindings = [
        SeriesRepository::class => EloquentSeriesRepository::class,
    ];

    public function provides(): array
    {
        return array_keys($this->bindings);
    }
}
1 resposta
solução!

Olá, Carlos! Tudo bem com você?

Desde já peço desculpa pela demora para responder o seu tópico.

A implementação que você mostrou parece estar correta. O método provides() da interface DeferrableProvider é responsável por retornar um array com as chaves dos bindings que o provedor está disponibilizando. No seu caso, você está retornando as chaves dos bindings definidos na propriedade $bindings.

Essa implementação permite que o provedor seja carregado de forma tardia, ou seja, apenas quando algum binding específico for necessário. Isso pode ajudar a otimizar o carregamento da sua aplicação, já que nem todos os bindings precisam ser carregados desde o início.

Dessa forma, quando você utilizar algum binding via atributo, o Laravel irá verificar se o provedor que contém esse binding está implementando a interface DeferrableProvider e, se estiver, irá utilizar o método provides() para saber quais bindings estão disponíveis.

Portanto, acredito que a solução que você encontrou está correta.

Espero ter ajudado e bons estudos!