Slim v4 Создание файла журнала - PullRequest
0 голосов
/ 14 апреля 2020

Итак, моя проблема в том, что у меня проблемы с тем, чтобы Slim записывал все свои действия в файл (например, app.log). Я наткнулся на множество учебных пособий и других форумов, похожих на этот, но проблема заключалась в том, что они использовали v3 Slim Framework. Я видел некоторые посты, предлагающие подобные вещи в настройках. php:

return [
    'settings' => [
        'displayErrorDetails' => true, // set to false in production
        'addContentLengthHeader' => false, // Allow the web server to send the content-length header
        // Renderer settings
        'renderer' => [
            'template_path' => __DIR__ . '/../templates/',
        ],
        // Monolog settings
        'logger' => [
            'name' => 'my-app',
            'path' => __DIR__ . '/../logs/' . $logDate->format('Y-m-d') . 'app.log',
        ],
    ],
];

Но проблема с этим методом заключается в том, что настройки в v4 больше не настраиваются таким образом. И вот я здесь. Штука. Если кто-нибудь сможет мне помочь, это очень поможет!

1 Ответ

0 голосов
/ 14 апреля 2020

Чтобы загрузить настройки в контейнере, необходимо добавить для него определение контейнера.

Пример файла настроек: config/settings.php

return [
    // set to false in production
    'displayErrorDetails' => true,

    // Renderer settings
    'renderer' => [
        'template_path' => __DIR__ . '/../templates/',
    ],
    // Monolog settings
    'logger' => [
        'name' => 'my-app',
        'path' => __DIR__ . '/../logs/' . date('Y-m-d') . '_app.log',
     ],
];

Пример записи контейнера в config/container.php:


use Psr\Container\ContainerInterface;
// ...

return [
    // ...

    'settings' => function () {
        return require __DIR__ . '/settings.php';
    },

   // Add more entries here ...
}

Чтобы получить настройки в контейнере, используйте это:

use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
// ...

return [
    // ...

    LoggerInterface::class => function (ContainerInterface $container) {
        $settings = $container->get('settings');
        $name = $settings['logger']['name'];

        $logger = new Logger($name);
        // Add logger handler...

        return $logger;
    },

    // ...
}

Совет: Для поддержки автопроводки лучше использовать объект коллекции вместо простой «строки» в качестве идентификатора контейнера , Читать дальше

...