Rumah  >  Soal Jawab  >  teks badan

Ralat perkhidmatan pendaftaran automatik: bergantung pada entiti ORM

Saya sedang membangunkan aplikasi Symfony 3. Log profil Symfony memberitahu saya:

依赖于服务自动注册类型"AppEntitySubDirCategory"已自3.4版本起被弃用,并且在4.0版本中将不再支持。
请创建一个名为"AppEntitySubDirCategory"的服务。

Namun, ini hanyalah kacang ORM yang mudah:

/**
 * @ORMEntity
 * @ORMTable(name="category")
 */
class Category
{
...

Bagaimana saya harus menyelesaikan masalah ini? Adakah saya benar-benar perlu mengisytiharkan entiti ORM sebagai perkhidmatan dalam services.yaml? Jika ya, apakah yang perlu dilakukan?

KEMASKINI Sebenarnya, entiti saya berada dalam subdirektori. Saya telah mengubah suai soalan saya.

Dalam service.yaml saya saya mencuba:

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

...Tapi takde kesan.

P粉872182023P粉872182023372 hari yang lalu792

membalas semua(1)saya akan balas

  • P粉281089485

    P粉2810894852023-11-06 19:06:16

    Adakah anda mempunyai kelas di bawah pendaftaran Perkhidmatan-auto yang menggunakan entiti sebagai parameter pembina?

    Di sinilah letak masalah anda.

    Anda perlu bertanya kepada diri sendiri sama ada kelas berkaitan ini benar-benar perkhidmatan atau hanya objek biasa yang anda selalu cipta kejadian sendiri.

    Jika ia tidak digunakan sebagai perkhidmatan melalui bekas, anda mempunyai dua pilihan:

    Anda boleh mengecualikan kelas ini melalui corak global seperti berikut:

    AppBundle\:
        resource: '...'
        # 您可以排除目录或文件
        # 但如果一个服务未使用,它会被移除
        exclude: '../../{Entity,PathToYourNotService}'

    Atau anda boleh menetapkan parameter berikut dalam konfigurasi anda:

    parameters:
        container.autowiring.strict_mode: true

    Dengan pilihan ini, bekas tidak akan cuba mencipta kelas perkhidmatan dengan parameter yang tidak tersedia sebagai perkhidmatan, dan anda akan mendapat ralat yang menentukan. Ini ialah tetapan lalai untuk sf4.

    Contoh yang baik yang mencetuskan ralat ini ialah kelas acara tersuai yang mengambil entiti sebagai muatan dalam pembina:

    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;
        }
    }

    Sekarang, jika fail ini tidak dikecualikan secara khusus, bekas akan cuba mendaftarkannya sebagai perkhidmatan secara automatik. Memandangkan badan pepejal dikecualikan, ia tidak boleh didawai secara automatik. Tetapi dalam 3.4, terdapat mekanisme sandaran ini yang mencetuskan amaran ini. Setelah strict_mode diaktifkan, acara itu tidak tersedia sebagai perkhidmatan dan akan menimbulkan ralat jika anda cuba menggunakannya sebagai perkhidmatan.

    balas
    0
  • Batalbalas