2017-12-20 26 views
2

私はSymfony 3アプリケーションを開発中です。 symfonyのプロファイラのログを教えてください:私はこの問題を取り除く必要がありますどのようにORMエンティティのサービス自動登録エラーに頼っています

/** 
* @ORM\Entity 
* @ORM\Table(name="category") 
*/ 
class Category 
{ 
... 

Relying on service auto-registration for type "App\Entity\SubDir\Category" 
is deprecated since version 3.4 and won't be supported in 4.0. 
Create a service named "App\Entity\SubDir\Category" instead. 

をしかし、これは簡単なORM豆のですか? services.yamlのサービスとしてORMエンティティを宣言する必要はありますか?はいの場合、どうですか?

更新 実際、私のエンティティはサブディレクトリにあります。私は私の質問を修正しました。私service.yaml

は、私が試してみました:

App\: 
    resource: '../src/*' 
    exclude: '../src/{Entity,Repository,Tests,Entity/SubDir}' 

...しかし無駄に。

+0

エンティティの場所をservices.ymlで無視してマークするべきではありませんか? – svgrafov

+0

また、App対AppBundleのネームスペースについても不思議です。 Flexを使用してインストールしない限り、S3はAppBundleをデフォルトで使用しています。 – Cerad

+0

私はそれを試すことができますが、私はそれらを無視してマークするためにどのように進めるべきですか? +私はラップトップからアプリケーションを実行しています。 – JVerstry

答えて

2

エンティティをコンストラクタ引数として使用するサービス - 自動登録のクラスはありますか?

これは問題の原因です。

関連するクラスが実際にサービスであるのか、それともあなた自身が常にインスタンスを作成する単なるオブジェクトであるのか、自分自身に尋ねる必要があります。次

AppBundle\: 
    resource: '...' 
    # you can exclude directories or files 
    # but if a service is unused, it's removed anyway 
    exclude: '../../{Entity,PathToYourNotService}' 

またはあなたが設定することができ、たとえばあなたが好きグロブパターンを介しても、このクラスを除外することができ

:それは、コンテナを介してサービスとして使用されていない場合

あなたは2つのオプションを持っていますパラメータ

parameters: 
    container.autowiring.strict_mode: true 

このオプションを使用すると、コンテナはサービスとして利用できない引数を持つサービスクラスを作成しようとせず、次のようになります。決定的なエラーを起こす。これはSF4のデフォルト設定です

まさにこのエラーは、コンストラクタでペイロードとしての実体を取るカスタムイベントクラスになりトリガークラスの良い例:今すぐ

namespace AppBundle\Event; 

use AppBundle\Entity\Item; 
use Symfony\Component\EventDispatcher\Event; 

class ItemUpdateEvent extends Event 
{ 
    const NAME = 'item.update'; 

    protected $item; 

    public function __construct(Item $item) 
    { 
     $this->item = $item; 
    } 

    public function getItem() 
    { 
     return $this->item; 
    } 
} 

場合は、このファイルのISNコンテナがサービスとして自動的に登録しようとします。エンティティは除外されているため、それをオートワイヤリングすることはできません。しかし3.4では、この警告がトリガーされるこのフォールバックがあります。 strict_modeがアクティブになると、イベントはサービスとして利用できなくなり、イベントとして使用しようとするとエラーが発生します。

+0

厳密なモードを設定すると、そのジョブが完了したようです。 – JVerstry

+0

お役立ち情報あなたが興味を持っているのであれば、ちょっとしたサンプルクラスを使って私の最後の編集をするのが助かります。 – Joe

関連する問題