2017-04-08 27 views
-1

我試圖在App \ Service中精確定義src之外的服務。我知道Symfony中的服務只是一個類,因此我應該可以將它放在任何地方。Symfony3 - 在src/bundle之外定義服務

這就是我目前得到:

應用程序\ CONFIG \ 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

似乎你放置文件的位置'SerializeService.php'沒有註冊到自動加載。 –

+0

@PBBALL好呼!非常感謝你。我只是把它添加到作曲家自動加載 - 愚蠢的錯誤。 – Robert

回答

1

由於Pib Ball表示您的自動加載器可能缺少一些信息。

我已經試過以下設置

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

我用你的代碼,沒有變化。

我有同樣的錯誤,你的話我已經編輯我的composer.json如下

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

然後執行命令composer update,然後你的服務應該被加載。

希望它可以幫助你

+0

嗨,我完全像你在豬球寫下他的評論之後做的那樣,它也適用於我。 – Robert