我有一个孤立的类文件,该文件位于纤细的控制器或周期之外:
class UserModel
{
public function getSingleUser( string $field, $value )
{
return ( new DbSql )->db()->table( 'users' )->where( $field, $value )->first();
}
}
我想通过访问该服务也注册在Slim容器中的此服务来替换DBSQL类的实例化。
问题:
1)如何访问此类的苗条容器?
2)我在文档中没有看到这样的示例,是应该避免的东西吗?我是否应该避免从外部纤细控制器访问苗条的容器?
我在Doc
中没有看到这样的示例
那可能是因为容器是Slim-> pimple的依赖性
我是否应该避免从外部纤细控制器访问苗条的容器?
no,实际上该容器应用于构造所有对象
我如何访问此类的纤细容器
您不应访问班级中的di-container。相反,容器应在构造函数中注入所需的实例。
所以首先,当您尚未完成此操作时,将DbSql
添加到容器中:
$app = SlimApp();
$container = $app->getContainer();
$container['DbSql'] = function($c) {
return new DbSql();
};
然后将UserModel
添加到容器中,然后将DbSql
添加为构造函数参数
$container['UserModel'] = function($c) {
return new UserModel($c['DbSql']);
};
将构造函数添加到UserModel
class UserModel {
private $dbSql;
public function __construct(DbSql $dbSql) {
$this->dbSql = $dbSql;
}
public function getSingleUser( string $field, $value ) {
return $this->dbSql->db()->table( 'users' )->where( $field, $value )->first();
}
}
现在您可以从容器中获得UserModel
$userModel = $container['UserModel'];
$user = $userModel->getSingleUser('name', 'jmattheis');