Ralat perkhidmatan pendaftaran automatik: bergantung pada entiti ORM
P粉872182023
P粉872182023 2023-11-05 20:56:05
0
1
667

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 dalamservices.yaml? Jika ya, apakah yang perlu dilakukan?

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

Dalamservice.yamlsaya saya mencuba:

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

...Tapi takde kesan.

P粉872182023
P粉872182023

membalas semua (1)
P粉281089485

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.

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!