Rumah > Soal Jawab > teks badan
Menjalankan komposer update
、install
、require
、dump-autoload
dll; tiba-tiba saya mula mendapat pemberitahuan penamatan kuning yang berkata:
Kelas FooBarBaz yang terletak di ./foo/bar/utility/baz.php tidak mematuhi piawaian autoloading psr-4. melompat ke atas.
Sebelum Komposer 2.0, anda biasanya akan mendapat:
Notis Penamatan: Kelas FooBarBaz yang terletak di ./foo/bar/Baz.php tidak mematuhi piawaian autoloading psr-4. Autoloading tidak akan tersedia lagi dalam Composer v2.0. di phar:///usr/local/bin/composer/src/Composer/Autoload/ClassMapGenerator.php:201
Mengapa saya mendapat pemberitahuan atau amaran ini? Apa yang saya perlu dapatkan daripada ini dan bersedia untuk Komposer 2.0?
P粉5877801032023-10-27 14:50:27
Dalam kes saya, ralat ini disebabkan oleh salinan fail ./foo/bar/utility/baz.php yang muncul di lokasi yang dinaik taraf ./foo/bar/baz.php atas apa jua sebab. Selepas mengalih keluar yang terakhir, ralat yang mengelirukan hilang. Walaupun saya menghabiskan beberapa jam menatap nama laluan kecil/huruf besar, saya pada mulanya tidak mempunyai masalah dengan fail itu.
P粉9596764102023-10-27 12:42:14
Ini boleh berlaku atas pelbagai sebab.
Adalah penting untuk memberi perhatian kepada mesej ralat , ia biasanya sangat tepatdalam menentukan punca masalah.
Punca yang paling biasa ialah, seperti yang ditunjukkan oleh mesej ralat, Bar.php
Kes komponen nama laluan yang berbeza tidak sepadan dengan kes nama kelas yang layak sepenuhnya
foo/bar/Baz.php
与 AppBarBaz
Tiada jodoh.
Hanya kemas kini aplikasi atau pakej anda supaya setiap komponen laluan sepadan dengan kes ruang nama yang dimilikinya:
Foo\Bar\Baz.php
Semak nama laluan terhadap ruang nama dengan berhati-hati. Kadangkala anda menamakan kelas (atau ruang nama) FooBar
tetapi laluannya pada cakera ialah "foo-bar", contohnya. Atau hanya itu atas sebab apa pun ruang nama anda tidak betul-betul sepadan dengan nama laluan fail.
Ini juga akan mencetuskan pemberitahuan/amaran. Anda perlu menamakan semula fail atau menamakan semula kelas (atau ruang nama).
Secara umum, lebih mudah untuk menukar laluan atau fail, kerana menukar nama kelas atau ruang nama memerlukan pemfaktoran semula kod untuk memadankan nama baharu, manakala menukar laluan tidak memerlukan pemfaktoran semula apa-apa.
Andaikan anda mempunyai:
"autoload": {
"psr-4": {
"Fizz\Buzz\": "src/"
}
},
Dan kelas Dummy
, ditakrifkan di dalam Dummy
,在内部定义src/Buzz
src/Buzz
:
// src/Buzz/Dummy.php namespace Fizz\Buzz class Dummy {}
Kaedah di atas akan berfungsi, tetapi akan membuang pemberitahuan seperti kaedah lain. Pendekatan yang betul ialah:
// src/Buzz/Dummy.php namespace Fizz\Buzz\Buzz class Dummy {}
Anda perlu membuat perubahan bukan sahaja pada kelas yang terjejas, tetapi juga pada mana-mana fail lain yang menggunakan atau mengimport kelas ini. (Sebagai contoh, sekarang isytiharkan use FizzBuzzBuzzDummy;
).