パッケージがアプリケーションに含まれているときに名前空間のないPHPファイルを自動的にロードする必要があるパッケージがあります。Composerに依存関係としてインクルードされたときにファイルを自動的にインクルードする
以下は、私がappA/
ためPackageA
依存関係を作る際に、パスのリポジトリを使用するように指示hereを追ってきた
packages/
+-- PackageA/
+-- Entities/
+-- Mappers/
+-- Services/
+-- composer.json
+-- constants.php
apps/appA/
+-- vendors/
+-- autoload/
+-- composer.json
apps/appB/
+-- vendors/
+-- composer.json
私の一般的なディレクトリ構造です。この部分はスムーズに動作します。
PackageA
のファイルの中には、ほとんどの場合ファイルパスにアクセスする必要があります。これは、「constants.phpは」何のためにあるのかで、これらの値は手続き的に定義されています
<?php
define('XML_REPO_PATH', __DIR__ . '/../blah/xml/');
// --etc--
私はもともとで、「パッケージ/ PackageA/composer.json」で「ファイル」オートローディングメカニズムを使用することを考えた:
{
...
"autoload": {
"psr-4": { ... }
"files": ["constants.php"]
}
}
ただし、PackageA
がappA
に含まれる場合、constants.phpは必要ありません。これを修正するには、代わりに「パッケージ/ PackageA/composer.json」で"files": [...]
を入れて、私は「アプリ/ appsA/composer.json」の自動ロードセクションに次のように置く:
"files": ["vendors/packages/PackageA/constants.php"]
をこれは非常にではありません望ましいことは、アプリケーションPackageA
を使用する必要があるためです。私は、コンポーザーの性質上、PackageA
のファイルが、構成定数の場合のように、特定の手続き型コードにアクセスできる(すなわち、含まれることを保証する)ことができるようになると考えています。これを行う方法はありますか?
名前空間を 'constants.php'ファイルに追加することができず、定期的な自動読み込みを使用する理由はありますか? – Chris
@Chris php <5.6でクラス定数を '__DIR__'のような他の定数と連結することができない – jeremy