【问题标题】:Class Not found in AppKernel.php在 AppKernel.php 中找不到类
【发布时间】:2013-07-09 04:10:17
【问题描述】:

我正在尝试部署我的 Symfony2 项目。当我运行命令时

php app/console cache:clear --env=prod --no-debug

我收到以下错误:

PHP Fatal error: Class 'Acme\MainBundle\AcmeMainBundle' not found in /var/www/html/app/AppKernal.php on line 24

这是在 AppKernal.php 中的

public function registerBundles()
{
    $bundles = array(
        ...
        new Acme\MainBundle\AcmeMainBundle(),
    );
    ...
}

命名空间好像有问题?

【问题讨论】:

  • 类是自动加载还是手动加载?
  • 我不确定。你是什​​么意思/我怎么弄清楚?

标签: php symfony deployment namespaces


【解决方案1】:

如果您在 Symfony 中收到 bundle not found 错误,请在 composer.json 中修改 autoload 部分下的 psr-4 部分,如下所示。

"autoload": {
    "psr-4": {
        "": "src/"
    },
},

通过这样做,您不必在创建新包时显式添加新包命名空间。

【讨论】:

  • 救命稻草!我花了几个小时才找到这个。我想我从composer require symfony/symfony 得到了这个AppBundle\\... 默认配置
【解决方案2】:

遇到了同样的问题。 我刚刚删除了我的供应商文件夹

rm -rf vendor

并重新启动作曲家更新..然后一切都很好

composer update

【讨论】:

    【解决方案3】:

    如果这发生在 Symfony 3 中(我还没有在 symfony 2 中测试过),

    1. 确保您的包在 AppKernal.php 中注册为:

      public function registerBundles()
      {
          $bundles = array(
              ...
              new YourBundle\YourBundle(),
          );
          ...
      }
      
    2. 检查你是否更新了 composer.json

      "autoload": {
          "psr-4": {
              "AppBundle\\": "src/AppBundle",
              "YourBundle\\": "src/YourBundle"
          },
          "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
      },
      
    3. 从您的控制台运行composer update

    【讨论】:

      【解决方案4】:

      在使用 Symfony 3.2 的代码生成器添加捆绑包后遇到了同样的问题。我必须在 AppBundle 之后的 composer.json 的 autoload 部分添加这个新包:

      (...)
      "autoload": {
          "psr-4": {
              "AppBundle\\": "src/AppBundle",
              "CoreBundle\\": "src/CoreBundle"
          },
      (...)
      

      【讨论】:

      • 并从控制台“composer dump-autoload”运行
      【解决方案5】:

      原来我需要将此添加到自动加载器。感谢@DevZer0 的评论。

      $loader->add('Acme', __DIR__ . '/../src');

      【讨论】:

      • 你必须在哪里添加这个?在app/autoload.php?
      • 抱歉,久违了。我不记得了。这似乎是正确的。
      • 这不是解决方案,这只是一个解决方法/补丁(尽管它可能有效)。
      • 这些文件由 Composer 自动生成。您将在下次 composer install、require、update 或 dumpautoload 运行时手动更改。
      【解决方案6】:

      有同样的问题吗?

      sudo rm -rf 供应商/

      composer install
      

      composer update
      

      【讨论】:

        【解决方案7】:

        删除整个文件夹对我来说不是很令人信服,所以我尝试执行以下操作并且成功了:

        $ composer update
        

        然后我检查了它:

        $ php bin/console assets:install web --symlink
        $ php bin/console cache:clear
        

        【讨论】:

          【解决方案8】:

          我之前遇到过以上所有错误,但是在运行php app/console doctrine:migrations:status时发现了类似的问题。

          问题是我没有导入用作注释一部分的常量。例如:

          /**
           * Either "OUTBOUND" (we send out) or "INBOUND" (we receive).
           *
           * @var string
           *
           * @ORM\Column(name="Direction", type="string", length=20, nullable=true)
           *
           * @Assert\Choice(
           *     choices = {BatchDirections::OUTBOUND,BatchDirections::INBOUND},
           *     message = "Choose a valid direction."
           * )
           */
          private $Direction = BatchDirections::INBOUND;
          

          我没有导入 BatchDirections 文件。

          使用use Nora\BatchBundle\Constants\BatchDirections; 解决导入解决了该问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-08-29
            • 2019-02-25
            • 1970-01-01
            • 1970-01-01
            • 2016-09-06
            • 2019-11-19
            • 2011-11-05
            相关资源
            最近更新 更多