繁体   English   中英

PHP致命错误:在第47行的/var/www/znata.com/app/AppKernel.php中找不到类'Application \\ Sonata \\ MediaBundle \\ ApplicationSonataMediaBundle'

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

我按照文档安装SonataMediaBundle,但出现此错误:

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

使用sonata命令t生成应用后:

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

新目录在以下位置生成:

apps/Application/Sonata/MediaBundle

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

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

您知道如何解决此问题吗?

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

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

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

调试此问题后,我发现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中注册了名称空间Application,并且工作正常。

因此,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”命名空间。 因此,也许在使用它们时,我们也应该像应用程序名称空间一样注册它们。

希望对您有帮助。

使用composer,我在composer.json中做到了这一点: "autoload": { "psr-0": { "": "src/", "Application": "app/" } },

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

这产生了需要的额外自动加载。

  1. 在您的composer.json文件中,具有:

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

     composer dump-autoload 

    重新生成自动加载文件。

new Application\Sonata\MediaBundle\MediaBundle(),

要么

new Application\Sonata\MediaBundle\SonataMediaBundle(),

如skonsoft所述,您需要在autoload.phpautoload.php名称空间。 我在FOQ.Elastica中遇到了同样的问题,并通过添加以下内容解决了它。

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

您还可以使用应用程序名称空间前缀,以便程序包位于名称空间下

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM