我的设置是这样的:
我从此文件请求设置,并将其存储在settings变量中。
$settings = require __DIR__ . '/settings.php';
接下来,像这样创建一个新的Slim实例:
$app = new \Slim\App($settings);
$container = $app->getContainer();
$container['logger'] = function($c) {
$settings = $c->get('settings')['logger'];
$logger = new \Monolog\Logger($settings['name']);
$file_handler = new \Monolog\Handler\StreamHandler($settings['path']);
$logger->pushHandler($file_handler);
return $logger;
};
然后我正在呼叫路线:
$this->get('/testlogger, __testReq::class . ':test);
以上路线在我的课程中调用了“ test”方法。通过自动加载加载。在我正在尝试访问容器的班级(控制器)下方,如Slim网站上所述。
class __testReq {
function test($request, $response){
//According to Documentation i am supposed to be able to call logger like so:
$this->logger->addInfo("YEY! I am logging...");
}
}
为什么不起作用?
答案 0 :(得分:1)
来自Slim documentation(文档使用HomeController类作为示例):
Slim首先在容器中查找HomeController的条目,如果找到它将使用该实例,否则它将使用容器作为第一个参数调用其构造函数。
因此,在您的class __testReq
构造函数中,您需要设置对象:
class __testReq {
// logger instance
protected $logger;
// Use container to set up our newly created instance of __testReq
function __construct($container) {
$this->logger= $container->get('logger');
}
function test($request, $response){
// Now we can use $this->logger that we set up in constructor
$this->logger->addInfo("YEY! I am logging...");
}
}