Symfony - 在 src/bundle 之外定义服务

Symfony3 - Define service outside src/bundle

我正在尝试在 src 之外定义服务,准确地说是在 App\Service 中。我知道 Symfony 中的服务只是一个 class 因此我应该可以把它放在任何地方。

这就是我目前得到的:

app\config\services.yml

parameters:
  serializer_service_class: App\Service\SerializeService

services:
    app.serializer:
        class: '%serializer_service_class%'
        autowire: true

服务只是一个简单的序列化 class:

SerializeService.php

<?php

namespace App\Service;

use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;

/**
 * Class SerializeService
 * @package App\Service
 */
class SerializeService
{
/**
 * @var Serializer
 */
private $serializer;

/**
 * @var array
 */
private $encoders;

/**
 * @var array
 */
private $normalizer;

/**
 * SerializeService constructor.
 */
public function __construct()
{
    $this->encoders = array(new XmlEncoder(), new JsonEncoder());
    $this->normalizer = new ObjectNormalizer();

    $this->normalizer->setCircularReferenceHandler(function ($object) {
        return $object->getId();
    });

    $this->serializer = new Serializer($this->normalizer, $this->encoders);
}

public function serialize2Json($item)
{
    return $this->serializer->serialize($item, 'json');
}

}

然后我收到此错误消息:

Attempted to load class "SerializeService" from namespace "App\Service".
Did you forget a "use" statement for another namespace?

我确实尝试过为此寻找解决方案,并且尝试过不同的选择。如果它在 Whosebug 的某个地方,请指出这个 post.

提前致谢。

正如 Pib Ball 所说,您的自动加载器可能缺少一些信息。

我试过以下设置

myProjectRoot/
    app/
        config/
        Resources/
        Service/
            SerializeService.php <- your service file

我已经使用了你的代码,没有变化。

我和你有同样的错误,然后我编辑了我的composer.json如下

................
"autoload": {
    "psr-4": {
        "": "src/",
        "App\": "app/",
    }
},

然后执行命令composer update然后你的服务应该被加载。

希望对您有所帮助