Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Symfony3 Melemparkan ClassNotFoundException Selepas Menjana Himpunan?

Mengapa Symfony3 Melemparkan ClassNotFoundException Selepas Menjana Himpunan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-22 09:31:111051semak imbas

Why Does Symfony3 Throw a ClassNotFoundException After Generating a Bundle?

Symfony3 ClassNotFoundException Unraveled

Seorang pengguna menemui ClassNotFoundException yang digeruni semasa memulakan projek Symfony3 baharu selepas membuat himpunan. Menyelam jauh ke dalam butiran:

  1. Projek Symfony baharu telah dimulakan dengan ArtProject baharu symfony.
  2. Himpunan baharu telah dijana menggunakan php app/console generate:bundle Paul/ArtBundle, yml , src/.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn