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
然后你的服务应该被加载。
希望对您有所帮助
我正在尝试在 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
然后你的服务应该被加载。
希望对您有所帮助