cari

Rumah  >  Soal Jawab  >  teks badan

Kelas Foo\Bar\Baz yang terletak di ./foo/bar/utility/baz.php tidak mematuhi piawaian autoloading psr-4. lompat tali

Menjalankan komposer updateinstallrequiredump-autoloaddll; 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粉052724364P粉052724364414 hari yang lalu644

membalas semua(2)saya akan balas

  • P粉587780103

    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.

    balas
    0
  • P粉959676410

    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.

    Path Case

    Punca yang paling biasa ialah, seperti yang ditunjukkan oleh mesej ralat, Bar.phpKes komponen nama laluan yang berbeza tidak sepadan dengan kes nama kelas yang layak sepenuhnya

    foo/bar/Baz.phpAppBarBaz Tiada jodoh.

    Hanya kemas kini aplikasi atau pakej anda supaya setiap komponen laluan sepadan dengan kes ruang nama yang dimilikinya:

    Foo\Bar\Baz.php

    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:

    "autoload": {
            "psr-4": {
                "Fizz\Buzz\": "src/"
            }
        },
    

    Dan kelas Dummy, ditakrifkan di dalam Dummy,在内部定义src/Buzzsrc/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;).

    balas
    0
  • Batalbalas