私は依然として、Pimpleを使用して依存性注入デザインパターンのいくつかの面を頭で覆そうとしています。クラスFooに属するコンストラクタまたはセッタ関数を使用して、クラスBarに依存することを確立するという概念を完全に理解しています。Pimple for Dependency Injectionを使用して別のクラスのオブジェクトファクトリを使用するにはどうすればよいですか?
Pimpleファクトリを使用しているときに、Fooに属するメソッドの内部から、クラスBarの複数の新しいインスタンスを正しくインスタンス化する方法があります。
基本的に私はこれと同等のものを達成したい:
Block.php
class Block {
private $filepath;
public function setFilePath($filepath) {
$this->filepath = $filepath;
}
}
Page.php
class Page {
private function newBlock() {
//do something here to get $filepath
$block = new Block();
$block->setFilePath($filepath);
return $block;
}
}
私は次のように私のコンテナのにきびを使用していますso:
$container = new Container();
$container['page'] = $container->factory(function ($c) {
return new Page();
});
$container['block'] = $container->factory(function ($c) {
return new Block();
});
bootstrap.phpのアイデアは、定義された複数のページがあり得ることであり、各ページは、潜在的に複数のブロックで構成されています。各ブロックのプロパティは、Page内のメソッドによって定義されます。そして、完全に分離されたコードを使用する必要があります。
コンテナ全体を依存関係としてページに挿入するのは、実際はサービスロケータの反パターンです。したがって、以下はBADコードです。
class Page {
private $container;
public function __construct(Container $container) {
$this->container = $container;
}
private function newBlock() {
//do something here to get $filepath
$block = $this->container['block'];
$block->setFilePath($filepath);
return $block;
}
}
PageにDICで定義されているブロックファクトリを使用する方法を教えてください。
はい、ありがとうございます!それは完璧に働いた。私はちょうど私が見える条件にいなかったそれは信じられないほどシンプルなものになると思った。 乾杯! – Fliggerty