Pergunta

Como carrego automaticamente um conjunto de funções de API de biblioteca com uma biblioteca instalada do compositor?

Eu tenho uma biblioteca com uma API de função usada para fazer interface com os objetos internos da biblioteca e quero que o compositor carregue automaticamente a API e a disponibilize após a instalação, sem exigir que o desenvolvedor final inclua um arquivo.

Atualmente a biblioteca é carregada incluindo apenas o __init__.php e inclui as funções da API e um autoloader, se necessário.

Obrigado!

Foi útil?

Solução

O Composer sempre exigirá que o desenvolvedor final inclua um arquivo, que é vendor/autoload.php.Você não pode tornar isso mais fácil.

Mas o que você pode fazer é incluir __init__.php opcional porque a integração do Composer permite que você use esse autoloader.Isso também funcionará para funções que não podem ser carregadas automaticamente - o Composer oferece sempre a inclusão de um arquivo, se assim for solicitado.

Então, no final, a configuração do Composer dessa biblioteca API ficaria assim:

{
    "name": "yourvendorname/yourfancylibraryname",
    "license": "any open source identifier",
    "autoload": {
        "psr-0": {
            "Foo_Api": "src/files"
        },
        "classmap": [
            "extra/folders_with_any_other_class_not_conforming_to_psr0_or_psr4"
        ],
        "files": [
            "functions/file_with_your_function_definitions.php"
        ]
    }
}

Não sei se suas classes estão em conformidade com o PSR-0 ou mesmo com o PSR-4, mas se estiverem, você e todos se beneficiariam se pudessem declarar o autoloader com esses padrões.Se não:O mapa de classe irá ajudá-lo.

A definição da sua função será carregada pelo arquivo ou arquivos mencionados em "arquivos".

Você não precisa mais de seu próprio autoloader para o Composer.

Claro que você também pode simplesmente mencionar o antigo __init__.php como o arquivo a ser incluído em "arquivos", mas isso separaria sua biblioteca de todas as outras classes, provavelmente teria menos desempenho (o Composer já possui um autoloader muito bom - não há necessidade de ter dois deles) e definitivamente exclui todas as suas classes de serem despejadas em um autoloader de classmap do Composer ainda mais rápido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top