注入从Slim

时间:2016-08-05 11:10:57

标签: php dependency-injection slim

我正在玩Slim PHP框架,偶然发现了一些我无法解决的问题。

首先,我将解释基本设置:

使用slim-skeleton,我有一个dependencies.php文件,其中设置了DIC。它是默认的瘦骨架设置,还有两件事:

$container['db'] = function ($c) {
    return new PDO('mysql:host=localhost;dbname=****', '********', '********');
};

$container['model.user'] = function ($c) {
    $db = $c['db'];
    return new Dash\Models\User($db);
};

因此,正如您所看到的,我在DIC中注册了两个新内容 - 一个 PDO 对象和一个用户对象。

但为每个其他模型传递数据库对象有点痛苦......我希望能够将PDO对象注入父类,称为模型。 / p>

所以模型看起来应该是这样的:

class Model
{
    protected $db;

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

用户模型:

class User extends Model
{
    public function getById($id)
    {
        $this->db->... // I have access to the database object (PDO) from the parent class.
    }
}

问题是我不能拥有父对象,因为超薄容器会返回用户的新实例,并且不会实例化父模型

关于如何实现继承的任何想法,使用Slim的容器以干净和可用的方式?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这不是继承的工作方式。 User Model的实例。所以当你做new User($c['db'])时,它会正常工作。