2017-04-08 1 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

@PigBallよろしくお願いします!どうもありがとうございました。私はちょうど作曲家の自動ロードに追加する必要があった - ばかな過ち。 – Robert

答えて

1

Pib Ballは、オートローダにはおそらくいくつかの情報が不足していると言われています。

私は次のセットアップ私はあなたのコードを使用している

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

、変更なしを試してみました。

私はその後、私は

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

を以下のように私composer.jsonを編集した、あなたと同じエラーを持っている。そして、コマンドcomposer updateを実行して、あなたのサービスをロードする必要があります。

ご希望の場合は

+0

こんにちは、ピッグボールが彼のコメントを書いた直後にあなたがしたのとまったく同じようにしてくれました。 – Robert

関連する問題