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

sko*_*oft 13 symfony symfony-sonata symfony-2.1 sonata-admin

我按照这个文档来安装SonataMediaBundle但是我收到了这个错误:

PHP Fatal error:  Class 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' not found in /var/www/znata.com/app/AppKernel.php on line 47
Run Code Online (Sandbox Code Playgroud)

使用sonata命令后生成应用程序:

php app/console sonata:easy-extends:generate SonataMediaBundle
Run Code Online (Sandbox Code Playgroud)

新目录生成于:

apps/Application/Sonata/MediaBundle
Run Code Online (Sandbox Code Playgroud)

一切都已完成,但当我在AppKernel.php中注册生成的应用程序时,我收到了该错误.

public function registerbundles()
{
    return array(
        ...
        new Application\Sonata\MediaBundle\ApplicationSonataMediaBundle(),
        ...
    );
}
Run Code Online (Sandbox Code Playgroud)

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

Vya*_*nis 9

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

php app/console sonata:easy-extends:generate --dest=src SonataMediaBundle
Run Code Online (Sandbox Code Playgroud)

在src中生成bundle或简单地将它复制到src.


sko*_*oft 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',
    ...
));
Run Code Online (Sandbox Code Playgroud)

但在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;
Run Code Online (Sandbox Code Playgroud)

有了这个新配置,一切都很好.但在SF2.0中,他们还谈到了"Imagine","Guffrette"和"Buzz"命名空间.因此perhapes在使用它们时,我们应该像Application命名空间一样注册它们.

我希望这对你有所帮助.


mez*_*eze 0

new Application\Sonata\MediaBundle\MediaBundle(),
Run Code Online (Sandbox Code Playgroud)

或者

new Application\Sonata\MediaBundle\SonataMediaBundle(),
Run Code Online (Sandbox Code Playgroud)