Projeto do WordPress para namespacing de acordo com os padrões da FIG

4

Estou tentando entender os namespaces, autoloaders e padrões FIG e, mais importante, como alcançar a integração deles com o WordPress o mais próximo possível.

Aqui está minha estrutura de arquivos, criada com a ajuda da pilha do WordPress roots / bedrock incrível.

|-- /web
|   |-- /app
|   |   |-- /mu-plugins
|   |   |   |-- autoload.php
|   |   |   |-- /cibulka-mu-base                 // abstract classes, traits, ... for features
|   |   |   |-- /cibulka-mu-feature-1            // features as custom post types, theme support, forms, ...
|   |   |   |-- /cibulka-mu-feature-2            // features as custom post types, theme support, forms, ...
|   |   |-- /themes
|   |   |   |-- /cibulka-parent-theme
|   |   |   |   |-- functions.php                // plays with MU plugins, sets default config
|   |   |   |-- /cibulka-child-theme
|   |   |   |   |-- functions.php                // plays with MU plugins, overrides default config
|   |   |-- /plugins
|   |   |   |-- /akismet
|   |   |   |-- /other third party software
|   |-- /wp
|   |   |-- /wp-admin
|   |   |-- /wp-includes
|   |   |-- etc.

Como imitar a estrutura de arquivos por namespaces e, ao mesmo tempo, pelo máximo de FIG-friendly possível? Ao mesmo tempo, "os pacotes" do "aplicativo" devem ser armazenados em pastas separadas, para que possam ser exigidos por composer.json arquivos e monitorados pelo GIT.

Eu tentei muitas opções, mas para ser honesto, estou pouco impressionado com o número de possíveis soluções e pelo fato de que nenhuma delas é muito ideal.

Você pode me dizer o que foi útil em seus casos?

Editar: rotas possíveis

  • seguindo totalmente a estrutura do diretório: web\app\muPlugins\CibulkaMuBase etc.
  • diretório de fornecedores "falsificados": cibulka\MU\Base , cibulka\themes\parentTheme , ...
  • manipulação adicional da estrutura de diretórios do WP - opções limitadas, complicando praticamente todo o resto, má compatibilidade, ...
  • algo mais inteligente ?
por Petr Cibulka 05.05.2014 / 13:17

1 resposta

2

Você está pensando demais nisso. A estrutura do namespace se aplica ao nível do pacote individual. Não há necessidade ou push para tratar o site inteiro como tal pacote.

Além disso, um dos benefícios de usar o autoload em primeiro lugar é que ele torna local de classes no sistema de arquivos amplamente irrelevante.

Portanto, a abordagem simples e prática é:

  1. Manipule namespaces no nível de pacote individual (plugin / theme).
  2. Use o PSR-4 suporte no Composer para estrutura de diretório simples dentro de pacotes, sem pasta excessiva níveis.
por Rarst 17.01.2015 / 18:31