注入对象,在 Slim 中从父 class 扩展
Injecting objects, which extends from a parent class in Slim
我正在使用 Slim PHP 框架,偶然发现了一个我无法解决的情况。
首先,我将解释基本设置:
使用 slim-skeleton,我有一个 dependencies.php 文件,其中设置了 DIC。这是默认的 slim-skeleton 设置,还有两件事:
$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 对象和 User 对象。
但是为每个其他模型传递一个数据库对象有点痛苦...我希望能够将 PDO 对象注入父对象 class,称为 型号.
所以模型应该是这样的:
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 的容器 returns User 的新实例并且没有实例化父对象 型号 class.
关于如何以干净可用的方式使用 Slim 的容器实现继承的任何想法?
提前致谢。
这不是继承的工作方式。 User
是 Model
的一个实例。因此,当您执行 new User($c['db'])
时,它会正常工作。
我正在使用 Slim PHP 框架,偶然发现了一个我无法解决的情况。
首先,我将解释基本设置:
使用 slim-skeleton,我有一个 dependencies.php 文件,其中设置了 DIC。这是默认的 slim-skeleton 设置,还有两件事:
$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 对象和 User 对象。
但是为每个其他模型传递一个数据库对象有点痛苦...我希望能够将 PDO 对象注入父对象 class,称为 型号.
所以模型应该是这样的:
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 的容器 returns User 的新实例并且没有实例化父对象 型号 class.
关于如何以干净可用的方式使用 Slim 的容器实现继承的任何想法?
提前致谢。
这不是继承的工作方式。 User
是 Model
的一个实例。因此,当您执行 new User($c['db'])
时,它会正常工作。