# Laminas-servicemanager: initializer config won't work

**URL:** <https://discourse.laminas.dev/t/laminas-servicemanager-initializer-config-wont-work/2276>\
**Category:** Components & MVC\
**Tags:** laminas-servicemanager\
**Created:** [April 28, 2021, 3:53pm UTC](https://discourse.laminas.dev/t/laminas-servicemanager-initializer-config-wont-work/2276 "2021-04-28T15:53:27Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![matti](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/matti/32/959_2.png) [@matti](https://discourse.laminas.dev/u/matti)\
**Post date:** [April 28, 2021, 3:53pm UTC](https://discourse.laminas.dev/t/laminas-servicemanager-initializer-config-wont-work/2276/1 "2021-04-28T15:53:27Z")

</div>

I’m trying to use [initializers](https://docs.laminas.dev/laminas-servicemanager/configuring-the-service-manager/#initializers) in my service manager config in `module.config.php`. This is my config:

```auto
<?php

/**
 * @see https://github.com/laminas/laminas-mvc-skeleton for the canonical source repository
 *
 * @copyright https://github.com/laminas/laminas-mvc-skeleton/blob/master/COPYRIGHT.md
 * @license https://github.com/laminas/laminas-mvc-skeleton/blob/master/LICENSE.md New BSD License
 */

declare(strict_types=1);

namespace Worker;

use Laminas\ServiceManager\Factory\InvokableFactory;
use Worker\Command\HelloCommand;
use Worker\Command\PublishCommand;
use Worker\Command\QueueCommandInitializer;
use Worker\Service\ElasticService;
use Worker\Service\ElasticServiceFactory;
use Worker\Service\RabbitmqService;
use Worker\Service\RabbitmqServiceFactory;

return [
    'laminas-cli' => [
        'commands' => [
            'app:hello' => HelloCommand::class,
            'app:publish' => PublishCommand::class,
        ],
    ],
    'service_manager' => [
        'factories' => [
            HelloCommand::class => InvokableFactory::class,
            PublishCommand::class => InvokableFactory::class,
            RabbitmqService::class => RabbitmqServiceFactory::class,
            ElasticService::class => ElasticServiceFactory::class
        ],
        'initializers' => [
            new QueueCommandInitializer()
        ]
    ],
];

```

The QueueCommandInitializer looks like this:

```auto
<?php

/**
 * @see https://github.com/laminas/laminas-mvc-skeleton for the canonical source repository
 *
 * @copyright https://github.com/laminas/laminas-mvc-skeleton/blob/master/COPYRIGHT.md
 * @license https://github.com/laminas/laminas-mvc-skeleton/blob/master/LICENSE.md New BSD License
 */

declare(strict_types=1);

namespace Worker\Command;

use Laminas\ServiceManager\Initializer\InitializerInterface;
use Psr\Container\ContainerInterface;
use Worker\Service\RabbitmqService;

class QueueCommandInitializer implements InitializerInterface
{
    public function __invoke(ContainerInterface $container, HelloCommand $instance)
    {
        if (!$instance instanceof QueueCommandInterface) {
            return;
        }
        $instance->setQueue($container->get(RabbitmqService::class));
    }
}

```

The `QueueCommandInterface` is an empty interface.

When I try to run my app I get the following error:

```auto
Fatal error: Uncaught Error: Class "Worker\Command\QueueCommandInitializer" not found in /Users/<redacted>/module/Worker/config/module.config.php:38

```

And I can’t figure out why. Any ideas?

---

<div class="post-metadata">

**Author:** ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)\
**Post date:** [April 28, 2021, 6:04pm UTC](https://discourse.laminas.dev/t/laminas-servicemanager-initializer-config-wont-work/2276/2 "2021-04-28T18:04:12Z")

</div>

> [@matti](#):
>
> I’m trying to use [initializers](https://docs.laminas.dev/laminas-servicemanager/configuring-the-service-manager/#initializers) in my service manager…

Use the delegators instead: [Migration Guide - laminas-servicemanager - Laminas Docs](https://docs.laminas.dev/laminas-servicemanager/migration/#initializers)

> [@matti](#):
>
> The QueueCommandInitializer looks like this

The class name and the namespace looks good, please check the filename.

---

<div class="post-metadata">

**Author:** ![matti](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/matti/32/959_2.png) [@matti](https://discourse.laminas.dev/u/matti)\
**Post date:** [April 29, 2021, 10:15am UTC](https://discourse.laminas.dev/t/laminas-servicemanager-initializer-config-wont-work/2276/3 "2021-04-29T10:15:23Z")

</div>

Filename looks good, too I think: `module/Worker/src/Command/QueueCommandInitializer.php`

---

<div class="post-metadata">

**Author:** ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)\
**Post date:** [April 29, 2021, 11:00am UTC](https://discourse.laminas.dev/t/laminas-servicemanager-initializer-config-wont-work/2276/4 "2021-04-29T11:00:22Z")

</div>

The class `QueueCommandInitializer` is not compatible with the interface of `Laminas\ServiceManager\Initializer\InitializerInterface`:

> [@matti](#):
>
> ```auto
> public function __invoke(ContainerInterface $container, HelloCommand $instance);
> 
> ```

It must be:

```auto
public function __invoke(ContainerInterface $container, $instance);

```

Apart from that, everything works for me.

---

<div class="post-metadata">

**Author:** ![matti](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/matti/32/959_2.png) [@matti](https://discourse.laminas.dev/u/matti)\
**Post date:** [April 29, 2021, 1:46pm UTC](https://discourse.laminas.dev/t/laminas-servicemanager-initializer-config-wont-work/2276/5 "2021-04-29T13:46:50Z")

</div>

Thanks! How would I hint my IDE so it knows what methods are available on that instance, though? A DocBlock…?

EDIT: Ah. You mention the methods in the interface.

```auto
<?php

declare(strict_types=1);

namespace Worker\Command;

use Worker\Service\RabbitmqService;

interface QueueCommandInterface
{
    public function setQueue(RabbitmqService $queue): void;
}

```
