13

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

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

使用奏鸣曲命令 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(),
        ...
    );
}

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

4

7 回答 7

9

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

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

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

于 2012-09-07T21:08:40.640 回答
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”命名空间。所以也许,在使用它们时,我们也应该像应用程序命名空间一样注册它们。

我希望这对你有帮助。

于 2012-09-05T18:39:07.010 回答
1

使用作曲家我在composer.json中做了这个: "autoload": { "psr-0": { "": "src/", "Application": "app/" } },

我添加了映射“应用程序”:“app/”。然后运行 composer update

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

于 2014-03-03T12:19:51.180 回答
1
  1. 在你的composer.json文件中,有:

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

    composer dump-autoload
    

    重新生成自动加载文件。

于 2018-04-04T10:57:05.603 回答
0

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

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

于 2013-02-25T22:53:27.437 回答
0
new Application\Sonata\MediaBundle\MediaBundle(),

或者

new Application\Sonata\MediaBundle\SonataMediaBundle(),
于 2012-09-05T00:18:33.513 回答
0

您还可以使用您的应用程序命名空间前缀,以便该包属于您的命名空间

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

于 2018-04-22T18:37:50.043 回答