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?
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.
Ini boleh berlaku atas pelbagai sebab.
Adalah penting untuk memberi perhatian kepada mesej ralat , ia biasanya sangat tepatdalam menentukan punca masalah.
Path Case
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 sepenuhnyafoo/bar/Baz.php
与AppBarBaz
Tiada jodoh.Hanya kemas kini aplikasi atau pakej anda supaya setiap komponen laluan sepadan dengan kes ruang nama yang dimilikinya:
Nama fail dan nama kelas atau perbezaan ruang nama
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.
Ruang nama bersarang dan pengisytiharan tiada
Andaikan anda mempunyai:
Dan kelas
Dummy
, ditakrifkan di dalamDummy
,在内部定义src/Buzz
src/Buzz
:Kaedah di atas akan berfungsi, tetapi akan membuang pemberitahuan seperti kaedah lain. Pendekatan yang betul ialah:
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;
).