Skip to content

Entries are not fetched in array parameters of the constructor's factory #488

@jjanvier

Description

@jjanvier

Hello there :) And thanks for this lib :)

I think I have found a bug, or at least a weirdness. Imagine I'd like to configure a KLogger service.

<?php

use Katzgrau\KLogger\Logger;
use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel;

return [
    'logger.dir' => sys_get_temp_dir(),
    'logger.level' => LogLevel::DEBUG,
    'logger.prefix' => 'a_prefix_'],
    LoggerInterface::class => DI\object(Logger::class)->constructor(
        DI\get('logger.dir'),
        DI\get('logger.level'),
        ['prefix' => DI\get('logger.prefix')]
    ),
];

This configuration does not. The logger prefix is not correctly translated. I get the following error:

[Sun May 21 13:00:07 2017] PHP Catchable fatal error:  Object of class DI\Definition\EntryReference could not be converted to string in /home/jjanvier/psr15_middleware/vendor/katzgrau/klogger/src/Logger.php on line 157
[Sun May 21 13:00:07 2017] PHP Stack trace:
[Sun May 21 13:00:07 2017] PHP   1. {main}() /home/jjanvier/psr15_middleware/examples/src/app.php:0
[Sun May 21 13:00:07 2017] PHP   2. DI\Container->get() /home/jjanvier/psr15_middleware/examples/src/app.php:20
[Sun May 21 13:00:07 2017] PHP   3. DI\Container->resolveDefinition() /home/jjanvier/psr15_middleware/vendor/php-di/php-di/src/DI/Container.php:124
[Sun May 21 13:00:07 2017] PHP   4. DI\Definition\Resolver\ResolverDispatcher->resolve() /home/jjanvier/psr15_middleware/vendor/php-di/php-di/src/DI/Container.php:287
[Sun May 21 13:00:07 2017] PHP   5. DI\Definition\Resolver\ObjectCreator->resolve() /home/jjanvier/psr15_middleware/vendor/php-di/php-di/src/DI/Definition/Resolver/ResolverDispatcher.php:58
[Sun May 21 13:00:07 2017] PHP   6. DI\Definition\Resolver\ObjectCreator->createInstance() /home/jjanvier/psr15_middleware/vendor/php-di/php-di/src/DI/Definition/Resolver/ObjectCreator.php:70
[Sun May 21 13:00:07 2017] PHP   7. ReflectionClass->newInstanceArgs() /home/jjanvier/psr15_middleware/vendor/php-di/php-di/src/DI/Definition/Resolver/ObjectCreator.php:138
[Sun May 21 13:00:07 2017] PHP   8. Katzgrau\KLogger\Logger->__construct() /home/jjanvier/psr15_middleware/vendor/php-di/php-di/src/DI/Definition/Resolver/ObjectCreator.php:138
[Sun May 21 13:00:07 2017] PHP   9. Katzgrau\KLogger\Logger->setLogFilePath() /home/jjanvier/psr15_middleware/vendor/katzgrau/klogger/src/Logger.php:126

A workaround is to configure the service as the following:

<?php

use Katzgrau\KLogger\Logger;
use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel;

return [
    'logger.dir' => sys_get_temp_dir(),
    'logger.level' => LogLevel::DEBUG,
    'logger.options' => ['prefix' => 'yamo_'],
    LoggerInterface::class => DI\object(Logger::class)->constructor(
        DI\get('logger.dir'),
        DI\get('logger.level'),
        DI\get('logger.options')
    ),
];

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions