PHP Slim 3 Framework - используйте MonoLog в пользовательском классе - используйте $ this, когда не в контексте объекта - PullRequest
0 голосов
/ 16 октября 2018

Я работаю со скелетом Slim 3 и пытаюсь использовать MonoLog в созданном мной пользовательском классе, который называется Utilities.

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'));   
};

Но я получаю сообщение об ошибке:

Сообщение: Использование $это когда не в контексте объектане уверен что?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я бы немного переработал 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;
    }

}
0 голосов
/ 17 октября 2018

Есть по крайней мере две важные вещи, которые я бы предложил.

Во-первых, статический метод не может вызвать $ this.В Slim Skeleton вы видите, что регистратор вызывается с помощью магического метода __invoke.Это не обязательно должен быть магический метод, а просто «статическая функция», чтобы получить доступ к $ this.

Второй - конструктор.Несмотря на то, что в ваших зависимостях вы указали, что хотите извлечь регистратор из контейнера, ваш текущий конструктор не ссылается на него.Вы видите это снова в шаблоне скелета Slim.Если вы не хотите использовать объявления «use», вы можете сделать:назови это.

<?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;
    }
}

Удачи вам

...