PHP Slim 3 Framework - 在自定义中使用 MonoLog Class - 在不在对象上下文中时使用 $this
PHP Slim 3 Framework - Use MonoLog in Custom Class - Using $this when not in object context
我正在使用 Slim 3 骨架并尝试在我创建的自定义 class 中使用 MonoLog,它被称为实用程序。
Utilities.php - index.php
需要
<?php
class Utilities {
protected $logger;
function __construct($c) {
$this->logger = $logger;
}
static function checkPerms() {
$this->logger->info("checkPerms() permissions of user id valid.");
return true;
}
}
Dependencies.php - 我添加了以下内容:
$container['utilities'] = function ($c) {
return new Utilities($c->get('logger'));
};
但我收到以下错误:
Message: Using $this when not in object context
File: /Applications/MAMP/htdocs/project/src/utilities.php
我一定是遗漏了什么,但我不确定是什么?
我至少建议两件重要的事情。
首先是静态方法不能调用$this。在 Slim Skeleton 中,您会看到记录器是通过魔术方法 __invoke 调用的。它不一定是一个神奇的方法,只是不是一个 "static function" 来访问 $this.
第二个是构造函数。即使在您的依赖项中您指定要从容器中检索记录器,您当前的构造函数也不会引用它。您在 Slim 骨架样板中再次看到了这一点。如果你不想使用 "use" 声明,你可以这样做:
function __construct(\Psr\Log\LoggerInterface $logger) {
$this->logger = $logger;
}
这样,容器将为您获取所需的 $logger,然后您可以使用非静态方法调用它。
<?php
namespace App\Action;
use Slim\Views\Twig;
use Psr\Log\LoggerInterface;
use Slim\Http\Request;
use Slim\Http\Response;
final class HomeAction
{
private $view;
private $logger;
public function __construct(Twig $view, LoggerInterface $logger)
{
$this->view = $view;
$this->logger = $logger;
}
public function __invoke(Request $request, Response $response, $args)
{
$this->logger->info("Home page action dispatched");
$this->view->render($response, 'home.twig');
return $response;
}
}
祝你好运
我会重构 Utilities.php 一点:
<?php
class Utilities
{
protected $logger;
function __construct($logger)
{
$this->logger = $logger;
}
public function checkPerms()
{
$this->logger->info("checkPerms() permissions of user id valid.");
return true;
}
}
我正在使用 Slim 3 骨架并尝试在我创建的自定义 class 中使用 MonoLog,它被称为实用程序。
Utilities.php - index.php
需要<?php
class Utilities {
protected $logger;
function __construct($c) {
$this->logger = $logger;
}
static function checkPerms() {
$this->logger->info("checkPerms() permissions of user id valid.");
return true;
}
}
Dependencies.php - 我添加了以下内容:
$container['utilities'] = function ($c) {
return new Utilities($c->get('logger'));
};
但我收到以下错误:
Message: Using $this when not in object context
File: /Applications/MAMP/htdocs/project/src/utilities.php
我一定是遗漏了什么,但我不确定是什么?
我至少建议两件重要的事情。
首先是静态方法不能调用$this。在 Slim Skeleton 中,您会看到记录器是通过魔术方法 __invoke 调用的。它不一定是一个神奇的方法,只是不是一个 "static function" 来访问 $this.
第二个是构造函数。即使在您的依赖项中您指定要从容器中检索记录器,您当前的构造函数也不会引用它。您在 Slim 骨架样板中再次看到了这一点。如果你不想使用 "use" 声明,你可以这样做:
function __construct(\Psr\Log\LoggerInterface $logger) {
$this->logger = $logger;
}
这样,容器将为您获取所需的 $logger,然后您可以使用非静态方法调用它。
<?php
namespace App\Action;
use Slim\Views\Twig;
use Psr\Log\LoggerInterface;
use Slim\Http\Request;
use Slim\Http\Response;
final class HomeAction
{
private $view;
private $logger;
public function __construct(Twig $view, LoggerInterface $logger)
{
$this->view = $view;
$this->logger = $logger;
}
public function __invoke(Request $request, Response $response, $args)
{
$this->logger->info("Home page action dispatched");
$this->view->render($response, 'home.twig');
return $response;
}
}
祝你好运
我会重构 Utilities.php 一点:
<?php
class Utilities
{
protected $logger;
function __construct($logger)
{
$this->logger = $logger;
}
public function checkPerms()
{
$this->logger->info("checkPerms() permissions of user id valid.");
return true;
}
}