Почему скалярное введение значения параметра не работает в конструкторе? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть класс настроек:

<?php
declare(strict_types=1);

namespace App;

class Settings
{
    private $settings_dir;
    private $settings_file_name;

//..


    public function __construct(string $dir, string $file_name)
    {
        $this->settings_dir = $dir;
        $this->settings_file_name = $file_name;
        //...
    }
//...
}

И конфиг для PHP-DI:

<?php
return [
   //...
    \App\Settings::class => DI\autowire()
        ->constructorParameter('dir', __DIR__),
    \App\Settings::class => DI\autowire()
        ->constructorParameter('file_name', 'app.php'),
 //...
];

Когда я запускаю свое приложение, оно говорит:

DI \ Definition \ Exception \ InvalidDefinition: запись «App \ Kernel» не может быть разрешена: запись «App \ Settings» не может быть разрешена: параметр $ dir of __construct () не имеет значения, определенного или предположительного

Когда я устанавливаю все значения одним методом, он работает нормально:

<?php
return [
   //...
    \App\Settings::class => DI\autowire()
        ->constructor(__DIR__, 'app.php')
];

Что не так?Я не делал никаких дополнительных настроек DI.

PHP-DI v6.0.2, PHP 7.2.5

1 Ответ

0 голосов
/ 09 июня 2018

Это просто из-за дублирования ключа массива.Я должен использовать:

\App\Settings::class => DI\autowire()->constructorParameter('dir', __DIR__)->constructorParameter('file_name', 'app.php')
...