0

依存性注入についてよく読んで、今何かを作ろうとしています。簡単なフォーム送信を考えました。input基本的に、タイトル用のフィールドとtextarea本文用のフィールドを持つフォーム。

次に、次のようなコンテナがあります。

class IoC
{
  protected $db;

  public static function newPost()
  {
     $post = new Post(); // Instantiate post class so we can use the methods in there
     $input = $post->getInput(); // Method that gets the POST values
     $post->insertInput($input, $db); // Method that adds the post values to a database
  }
}
//Call IoC::newPost(); on the page the form submits to

これはPostクラスです:

class Post
{
  protected $db;

  public function __construct($db)
  {
    $this->db = $db;
  }

  public function getInput()
  {
    // Should I get the post input here? Like $_POST['title'] etc. and put it 
    // into an array and then return it?
    return $input;
  }

  public function insertIntoDB($db, $input)
  {
    // Should I hardcode the connection and query here?
  }
}

ご覧のとおり、どこから接続するべきか混乱しています。考えてみるとDatabase、接続を作成し、コンテナでそのクラスを呼び出す、再利用可能な別のクラスを用意するのが賢明だと思いますか?

私は本当に知りません。どのようにそれを行うか教えてください。もしあれば例を挙げてください。

4

1 に答える 1

1

依存性注入の背後にある考え方は、文字通りすべての依存性を注入するというものです。Post クラスがあるとします。このクラス (あなたの場合) はデータベースに依存するため、データベース オブジェクトをコンストラクター (または、必要に応じてセッター、詳細については symfony2 を参照してください) に注入します。今度は Database クラスで、接続をセットアップするためのパラメーターが必要です。構成 (プロバイダー) オブジェクトを注入することで、これを行うことができます (はい!)。

コンテナは、オブジェクトを管理し、場合によってはそれらを初期化するコンテナにすぎません。Post オブジェクトに挿入できるように Database オブジェクトを初期化するのは、コンテナーのタスクです。

あなたの IoC が何をするのかはわかりませんが、それがあなたのコンテナーである場合、個人的にそれを行うことはお勧めしません。投稿オブジェクトを要求するコントローラーにコンテナーを渡すことができます。

http://symfony.com/doc/current/book/service_container.html

于 2013-04-24T11:25:32.097 に答える