require ('dataclass.php');
$db = new DataClass();
$app = new SlimSlim();
$app->group('/api/v1', function () use ($app, $db) {
require('processingclass.php');
$foo = new FooClass();
});
上面显然是一个不完整的 Slim 示例。但是,我将如何从$foo内部调用$db方法?
我有一堆路由,并希望从各个路由中使用的所有二级类访问数据库类 - 无需设置全局或在每个二级类或路由中加载/实例化数据库类。
不是 100% 清楚 Slim 框架结构,或者是否有内置的方法来处理 Slim 中的此类任务,但最好以这种方式传递它吗?
$foo = new FooClass($db);
然后在FooClass()
中调用在构造函数中设置$db
?像这样的东西?
class FooClass {
private $db = null;
function __construct($db) {
$this->db = $db;
}
}
同样,我的POV来自通用PHP类和OOP知识。所以不清楚斯利姆是否有更好的方法。如果有,欢迎了解更多。
执行此操作的"正确"方法是在应用程序容器(index.php)中声明。你已经得到了启动Slim $app
。使用 $container = $app->getContainer();
获取容器
在此之后,您只需执行以下操作:
$container['fooclass'] = function($container) {
$fooClass = new FooClass(...)
return $fooClass
}
然后你可以在任何地方使用它
$this->fooclass