使用DI->获取Phalcon PHP时出现“无效的服务定义”

时间:2012-11-29 23:45:10

标签: php phalcon

此问题与Appending multiple config arrays in PhalconPHP

有关

我正在尝试使用get方法从DI中检索对象。

对象正如此设置

// $new_array the array with the merged data. Load it in a 
// \Phalcon\Config object
$config = new \Phalcon\Config($new_array);

//Store the config in your DI container for easier use
$di->set('config', $config);

这是我致电

时收到的错误消息
$new_array = $di->get('config');
  

[Uncaught exception'Pharcon \ DI \ Exception',消息'无效   服务定义。缺少'className'参数']

我已经坚持了几天,所以非常感谢我能得到的任何帮助。

3 个答案:

答案 0 :(得分:2)

在集合中尝试这个:

$di->set('config', function() {
   ...
   return new \Phalcon\Config($new_array);
});

答案 1 :(得分:0)

看起来你正在做$di->set('config', $new_array);而不是$di->set('config', $config);:)

答案 2 :(得分:0)

如果$ config变量是一个数组。您可以在Missing 'className' parameter

引用我的答案

这是转发: 我发现Phalcon DI容器使用数组进行构造函数注入。因此,如果将数组设置到Phalcon DI容器中,它将理解要使用构造函数注入来设置对象,并且需要“ className”定义。您可以在https://docs.phalconphp.com/3.4/en/di的“构造函数注入”部分中进行检查。

文档中构造函数注入的示例:     

$di->set(
    'response',
    [
        'className' => 'Phalcon\Http\Response'
    ]
);

$di->set(
    'someComponent',
    [
        'className' => 'SomeApp\SomeComponent',
        'arguments' => [
            [
                'type' => 'service',
                'name' => 'response',
            ],
            [
                'type'  => 'parameter',
                'value' => true,
            ],
        ]
    ]
);

我的解决方案:

  1. 假设我要将这个配置数组['key'=>'value']设置为DI。
  2. 我创建MyConfigFactory类,该类具有函数构建以返回['key'=>'value']。
  3. 我按如下所示注入配置:

    $di->set('myConfigFactory', new MyConfigFactory());
    $di->set('config', function () use ($di) {
        return $di->get('myConfigFactory')->build();
    });