Symfony3 ClassNotFoundException Unraveled
Seorang pengguna menemui ClassNotFoundException yang digeruni semasa memulakan projek Symfony3 baharu selepas membuat himpunan. Menyelam jauh ke dalam butiran:
Mereka kecewa, cuba mengakses 127.0.0.1:8000 menghasilkan mesej ralat yang terkenal: "ClassNotFoundException: Cuba memuatkan kelas "PaulArtBundle" daripada ruang nama "PaulArtBundle".
Menyingkap Sebabnya
public function registerBundles() { $bundles = [ new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), ...... new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new AppBundle\AppBundle(), new Paul\ArtBundle\PaulArtBundle(), ]; }
dan PaulArtBundle ditakrifkan sebagai:
<?php namespace Paul\ArtBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class PaulArtBundle extends Bundle { }
Pautan Hilang Ditemui
Selepas banyak renungan, didapati bahawa arahan generate:bundle gagal mengemas kini bahagian autload composer.json, mengabaikan untuk menambah ruang nama baharu.
Resolusi
Untuk membetulkan isu tersebut, pengguna mengedit composer.json secara manual dan mengemas kini bahagian autoload:
# composer.json "autoload": { "psr-4": { "AppBundle\": "src/AppBundle", "Paul\": "src/Paul" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }
Melaksanakan dumpautoload komposer dan memulakan semula pelayan menyelesaikan masalah ClassNotFoundException.
Nota Tambahan
Pengguna memerhatikan bahawa berkas baharu mengatasi laluan lalai (/), maka ucapan "Hello World" yang tidak dijangka.
Menarik Insight
Sebelum Symfony 3.2, konfigurasi composer.json menganggap pemetaan PSR-4 tanpa ruang nama. Walau bagaimanapun, Symfony 3.2 memperkenalkan pendekatan yang lebih eksplisit, menyatakan ruang nama secara eksplisit. Peralihan ini mungkin telah menyumbang kepada isu ini.
Kesimpulan
Walaupun arahan generate:bundle secara sejarahnya merupakan cara mudah untuk mencipta berkas, perubahan terkini dalam konfigurasi pemuatan automatik Symfony memerlukan campur tangan manual untuk memastikan integrasi berkas yang lancar.
Atas ialah kandungan terperinci Mengapa Symfony3 Melemparkan ClassNotFoundException Selepas Menjana Himpunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!