Configurações e namespaces no desenvolvimento de pacotes para Laravel

fundo

Alguns dias atrás, eu estava puxando meu cabelo simplesmente porque não conseguia obter meus dados de configuração . Criar pacotes no Laravel 4 não é tão difícil quanto pode parecer à primeira vista, especialmente se você seguir a documentação corretamente. Não o fiz, então basicamente perdi algumas horas pensando no que fiz de errado, o que acabou me deixando preguiçoso na frente da TV.

De qualquer maneira.

Eu li a documentação novamente, mas ainda não resolvi meu problema. Abaixo, vou compartilhar como consegui obter meus dados de configuração. Note que esta dica cobrirá principalmente notas não encontradas na documentação do Laravel. Portanto, não continue lendo a menos que você tenha lido a documentação ou concluído os pacotes.

Criando Nosso Pacote

Ao fazer pacotes destinados ao Laravel, você executaria algo como php artisan workbench Zejesago/Laravel-Social --resources. Arrumado. Isso cria uma estrutura de pacote inicial para você em sua workbenchpasta.

Daqui em diante, vou me referir aos caminhos do diretório do pacote workbench/zejesago/laravel-social/,.

Depois disso, você pode começar a codificar e incluir configurações. Para carregar dados de configuração de config/facebook.php, você pode usar Config::get('laravel-social::facebook.appId');. Normalmente, isso funcionaria como deveria , mas não funcionou no meu caso.

O culpado

Eu estava tentando ser espirituoso, então mudei meu namespace de para ; Eu só gosto de organizar dessa forma. Aparentemente, não deve haver nenhum problema com essa abordagem. No entanto, também acabei mudando meu provedor de serviços de para .ZejesagoLaravelSocialZejesagoLaravelSocialZejesagoLaravelSocialSocialServiceProviderZejesagoLaravelSocialSocialServiceProvider

Solução

Descobri que a Configclasse não conseguiu encontrar nenhum arquivo de configuração do caminho do pacote, porque a ServiceProviderclasse pai adivinha o caminho a partir da localização do provedor de serviços. No meu caso SocialServiceProvider,. Tudo o que tive que fazer foi declarar explicitamente o caminho do pacote na função.boot()

public function boot()
{
$this
->package(
'zejesago/laravel-social', null, __DIR__.'/../../..');
}

Isso me levou muito tempo para finalmente descobrir. O fato de a Configaula ser apenas uma fachada torna ainda mais difícil dissecar como o Laravel faz isso. Acho que comecei do lado errado, inicialmente olhando para Configa ServiceProviderclasse dos pais em vez de primeiro.


Laravel Social (agora chamado de Laravel Facebook ) é um pacote que criei para praticar com o Laravel e usar em projetos.