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

时间:2017-04-08 20:59:10

标签: symfony serialization service dependency-injection bundle

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

这就是我现在所拥有的:

应用\设置\ services.yml

parameters:
  serializer_service_class: App\Service\SerializeService

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

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

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?

我真的试图找到解决方案,我尝试了不同的选择。如果它在stackoverflow上的某个地方,请指向我的帖子。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

我已尝试过以下设置

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

我使用过您的代码,没有任何更改。

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

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

然后执行命令composer update,然后加载您的服务。

希望它可以帮到你