瘦身依赖注入容器

3

我的 Slim 3 应用程序的索引结构如下:

// Instantiate the app
$config = require __DIR__ . '/../src/config.php';
$app = new \Slim\App($config);

// Set up dependencies
require __DIR__ . '/../src/dependencies.php';

// Register middleware
require __DIR__ . '/../src/middleware.php';

// Register routes
require __DIR__ . '/../src/routes.php';

// Run app
$app->run();

我有一个单独的worker.php文件,通过bash脚本执行,并且该文件在后台中不停地运行(监听某些事件)。

我如何向我的worker.php文件中注入服务,这些服务不属于Slim应用程序或dependencies.php中的$container,例如我想使用Monolog记录器。 dependencies:

$container = $app->getContainer();

/**@var \App\model\Model access to Model methods */
$model = new \App\model\Loan($app->getContainer()->get('settings')['db']);

$container['logger'] = function ($c) {
    $settings = $c->get('settings')['logger'];
    $logger = new Monolog\Logger($settings['name']);
    $logger->pushProcessor(new Monolog\Processor\UidProcessor());
    $logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], Monolog\Logger::DEBUG));
    return $logger;
};
3个回答

2

0

您可以使用Monolog-Cascade来实现此操作,如下所示:

在依赖项中:

// Configure Monolog with Cascade
$container['logger'] = function ($c) {
    Cascade::loadConfigFromArray($c->get('settings')['loggerConfig']);
    return Cascade::logger('logger_name_here');
};

然后在您的配置文件中(例如使用2个处理程序):

// Monolog-Cascade settings
    'loggerConfig' => [
        'handlers' => [
            // Stdout handler
            'console' => [
                'class' => 'Monolog\Handler\StreamHandler',
                'stream' => 'php://stdout',
                'level' => 'DEBUG'
            ],
            // File handler
            'file' => [
                'class' => 'Monolog\Handler\StreamHandler',
                'stream' => __DIR__.'/../../logs/hello.log',
                'level' => 'INFO'
            ]
        ],
        'loggers' => [
            'logger_name_here' => [
                'handlers' => ['console', 'file']
            ]
        ]
    ]

您可以在配置中添加任意数量的记录器、处理程序、格式化程序、处理器等。Cascade 将为您设置所有内容。

[免责声明]: 我是 Monolog-Cascade 的主要贡献者。


0

You Settings

return [
    'settings' => [
        'displayErrorDetails' => true, 
        // 'addContentLengthHeader' => false, // Allow the web server to send the content-length header

        // Monolog settings
        'logger' => [
            'name' => 'slim-app',
            'path' => __DIR__ . '/../logs/app.log',
            'level' => \Monolog\Logger::DEBUG,
        ],

    ],
];

in you dependenices.

$container['logger'] = function ($c) {
    $settings = $c->get('settings')['logger'];
    $logger = new Monolog\Logger($settings['name']);
    $logger->pushProcessor(new Monolog\Processor\UidProcessor());
    $logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], Monolog\Logger::DEBUG));
    return $logger;
  };


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接