ホームページ > バックエンド開発 > PHPチュートリアル > Symfony3 がバンドル生成後に ClassNotFoundException をスローするのはなぜですか?

Symfony3 がバンドル生成後に ClassNotFoundException をスローするのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-22 09:31:11
オリジナル
1019 人が閲覧しました

Why Does Symfony3 Throw a ClassNotFoundException After Generating a Bundle?

Symfony3 ClassNotFoundException Unraveled

ユーザーは、バンドルを作成した後、新しい Symfony3 プロジェクトに着手しているときに、恐ろしい ClassNotFoundException に遭遇しました。詳細を詳しく説明します:

  1. 新しい Symfony プロジェクトが symfony new ArtProject で開始されました。
  2. 新しいバンドルが php app/consolegenerate:bundle Paul/ArtBundle、yml を使用して生成されました。 、src/.

残念なことに、アクセスしようとしました127.0.0.1:8000 では、悪名高いエラー メッセージ「ClassNotFoundException: 名前空間 "PaulArtBundle" からクラス "PaulArtBundle" をロードしようとしました。

原因の解明

ユーザーはコードを注意深く確認し、AppKernel.php に次の内容が含まれていることに気付きました。次のステートメント:

public function registerBundles()
{
    $bundles = [
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        ......
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new AppBundle\AppBundle(),
        new Paul\ArtBundle\PaulArtBundle(),
    ];
}
ログイン後にコピー

そして PaulArtBundle は次のように定義されました:

<?php

namespace Paul\ArtBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class PaulArtBundle extends Bundle
{
}
ログイン後にコピー

ミッシング リンクが発見されました

よく考えた結果、 generate:bundle コマンドが、composer.json の autoload セクションの更新に失敗し、新しいファイルの追加を怠ったことが判明しました。 namespace.

解決策

問題を修正するために、ユーザーは、composer.json を手動で編集し、autload セクションを更新しました。

# composer.json
"autoload": {
    "psr-4": {
        "AppBundle\": "src/AppBundle",
        "Paul\": "src/Paul"
    },
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
}
ログイン後にコピー

実行コンポーザーダンプオートロードを実行してサーバーを再起動すると、問題が解決されましたClassNotFoundException.

追加メモ

ユーザーは、新しいバンドルがデフォルト ルート (/) をオーバーライドするため、予期しない "Hello World" 挨拶が行われることに気付きました。

興味深い洞察

以前Symfony 3.2 では、composer.json 設定は名前空間のない PSR-4 マッピングを想定していました。ただし、Symfony 3.2 では、名前空間を明示的に指定する、より明示的なアプローチが導入されました。この変化がこの問題の原因となっている可能性があります。

結論

generate:bundle コマンドは歴史的にバンドルを作成する簡単な方法でしたが、最近の Symfony の自動読み込み設定の変更により、シームレスなバンドル統合を実現するには手動介入が必要です。

以上がSymfony3 がバンドル生成後に ClassNotFoundException をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート