PHP-DIでプロジェクトを作成しようとしましたが、問題があります。PHP-DI作成したクラスにコンストラクタパラメータを挿入できません
これはトレースです:
は、コードは次のとおりです。
Containerクラス:
$this->containerBuilder->addDefinitions([
'Configuration' => DI\Object('Hetwan\Core\Configuration')->constructor($this->getRootDir().'/app/config/config.yml'),
'Database' => DI\object('Hetwan\Core\Database')
]);
Configurationクラス:
namespace Hetwan\Core;
use Symfony\Component\Yaml\Yaml;
class Configuration
{
private $attrs;
public function __construct($configFilePath)
{
$this->attrs = Yaml::parse(file_get_contents($configFilePath));
}
public function get($attrPath)
{
$el = $this->attrs;
foreach (explode('.', $attrPath) as $attr)
{
if (!isset($el[$attr]))
throw new ConfigurationException("Unable to get '{$attrPath}'.\n");
$el = $el[$attr];
}
return $el;
}
}
Databaseクラス:
namespace Hetwan\Core;
use Hetwan\Core\Configuration;
class Database
{
/**
* @Inject
* @var Configuration
*/
private $config;
private $entityManager;
public function create($entitiesPath)
{
$dbParameters = [
'driver' => 'pdo_mysql',
'user' => $config->get('database.user'),
'password' => $config->get('database.password'),
'dbname' => $config->get('database.name')
];
$this->entityManager = EntityManager::create($dbParameters, Setup::createAnnotationMetadataConfiguration([$entitiesPath], false));
}
public function getEntityManager()
{
return $this->entityManager;
}
}
私は何の問題もなく$container->get('Configuration')
にアクセスもできますし、それが動作します。
データベースクラスの作成時に、PHP-DIはConfigurationのインスタンスを再作成しようとしていると思います。なぜシングルトンインスタンスが既に存在するのかわかりません。
ありがとうございました!
いいえ「の設定が」私のサービス名であり、それは動作しますが、それは、Databaseクラスのコンフィギュレーションの注入が問題 –
は、私は '使用することができます@var Configuration'または' \ Hetwan \コア\ Configuration'何もチャン@varエラースタックのe –
コメントは答えに展開されました。それは間違っているかもしれないが、うまくいけば私はコメントでしたよりも私の感情をよく説明した。 – IMSoP