【问题标题】:PHP Fatal error: Class 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' not found in /var/www/znata.com/app/AppKernel.php on line 47PHP 致命错误:在第 47 行的 /var/www/znata.com/app/AppKernel.php 中找不到类 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle'
【发布时间】:2012-08-29 16:03:13
【问题描述】:

我按照this doc 安装 SonataMediaBundle 但我收到此错误:

PHP Fatal error:  Class 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' not found in /var/www/znata.com/app/AppKernel.php on line 47

使用奏鸣曲命令生成app后:

php app/console sonata:easy-extends:generate SonataMediaBundle

新目录生成于:

apps/Application/Sonata/MediaBundle

一切都完成了,但是当我在我的 AppKernel.php 中注册生成的应用程序时,我得到了那个错误。

public function registerbundles()
{
    return array(
        ...
        new Application\Sonata\MediaBundle\ApplicationSonataMediaBundle(),
        ...
    );
}

你知道如何解决这个问题吗?

【问题讨论】:

  • 你能准确描述你的包的路径吗?

标签: symfony symfony-2.1 symfony-sonata sonata-admin


【解决方案1】:

你也可以使用你的应用命名空间前缀,这样包就在你的命名空间下

bin/console sonata:easy-extends:generate --dest=src SonataMediaBundle --namespace_prefix=App

【讨论】:

    【解决方案2】:
    1. 在您的 composer.json 文件中,有:

      "autoload": {
          "psr-4": {
              "AppBundle\\": "src/AppBundle",
              "Application\\": "src/Application"
          },
      }
      
    2. 做一个简单的:

      composer dump-autoload
      

      重新生成自动加载文件。

    【讨论】:

    • 感谢完美,但我更喜欢保留捆绑逻辑:"Application\\": "src/Application" --> "Application\\Sonata\\UserBundle\\": "src/Application/Sonata/UserBundle"
    【解决方案3】:

    使用 composer 我在 composer.json 中执行此操作: "autoload": { "psr-0": { "": "src/", "Application": "app/" } },

    我添加了映射“Application”:“app/”。 然后运行 composer update

    这会产生额外的自动加载需求。

    【讨论】:

      【解决方案4】:

      正如 skonsoft 提到的,您需要在 autoload.php 中加载命名空间。我在使用 FOQ.Elastica 时遇到了同样的问题,并通过添加以下内容解决了它。

      $loader->add('FOQ', __DIR__.'/../vendor/bundles');

      【讨论】:

        【解决方案5】:

        默认项目根目录不在自动加载路径中,只有“src”目录。 你可以使用

        php app/console sonata:easy-extends:generate --dest=src SonataMediaBundle
        

        在 src 中生成 bundle 或简单地将其复制到 src。

        【讨论】:

          【解决方案6】:

          调试这个问题后,发现namspace应用没有注册。

          在 SF2.0 中,文档说我们应该像这样注册这个命名空间:

          <?php
          $loader->registerNamespaces(array(
              ...
              'Application'   => __DIR__,
              'Imagine'       => __DIR__.'/../vendor/imagine/lib',
              'Gaufrette'     => __DIR__.'/../vendor/gaufrette/src',
              'Buzz'          => __DIR__.'/../vendor/buzz/lib',
              ...
          ));
          

          但在 SF2.1 中他们确实谈到了这一点。

          所以我在 autoload.php 中注册了命名空间应用程序,它工作正常。

          所以,autoload.php 看起来像这样:

          <?php
          
          // file: app/autoload.php
          
          use Doctrine\Common\Annotations\AnnotationRegistry;
          $loader = require __DIR__.'/../vendor/autoload.php';
          
          //custom for Application
          $loader->add("Application", __DIR__);
          
          
          // intl
          if (!function_exists('intl_get_error_code')) {
              require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';
          
              $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
          }
          
          AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
          
          return $loader;
          

          有了这个新配置,一切都很好。但在 SF2.0 中,他们还谈到了“Imagine”、“Guffrette”和“Buzz”命名空间。所以也许,在使用它们的时候,我们也应该像应用程序命名空间一样注册它们。

          希望对你有所帮助。

          【讨论】:

            【解决方案7】:
            new Application\Sonata\MediaBundle\MediaBundle(),
            

            new Application\Sonata\MediaBundle\SonataMediaBundle(),
            

            【讨论】:

              猜你喜欢
              • 2017-04-24
              • 1970-01-01
              • 1970-01-01
              • 2015-01-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-28
              相关资源
              最近更新 更多