阅读了很多关于依赖注入的内容,现在我正在努力创造一些东西。我想到了一个简单的表单提交。基本上是一个表单,标题为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
类来创建连接并在容器中调用该类是明智的吗?
我真的不知道,随时告诉我你会怎么做,如果有的话可以举例说明。
答案 0 :(得分:1)
依赖注入背后的想法是你真正注入任何依赖项。说你有Post课程。这个类 - 在您的情况下 - 取决于数据库,因此您在构造函数中注入Database对象(或者如果您愿意,请设置setter,有关详细信息,请参阅symfony2)。您的数据库类需要参数来设置连接,您可以通过注入配置(提供者)对象来执行此操作(是的!)。
您的容器只不过是管理对象并可能初始化它们的容器。初始化Database对象是容器的任务,因此可以将其插入Post对象中。
我不知道你的IoC做了什么,但如果它是你的容器,我不会建议它私下这样做。您可以将容器传递给您要求post对象的控制器。