13

このドキュメントに従ってSonataMediaBundleをインストールしましたが、次のエラーが発生しました。

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

sonata コマンドを使用した後、アプリを生成します。

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

この問題をデバッグした後、名前空間アプリケーションが登録されていないことがわかりました。

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」の名前空間についても話しました。おそらく、それらを使用するときは、それらも Application 名前空間のように登録する必要があります。

これがお役に立てば幸いです。

于 2012-09-05T18:39:07.010 に答える
1

composer を使用して、composer.json でこれを行いました。 "autoload": { "psr-0": { "": "src/", "Application": "app/" } },

マッピング "Application": "app/" を追加しました。そして、実行します composer update

これにより、追加のオートロードが必要になりました。

于 2014-03-03T12:19:51.180 に答える
0
new Application\Sonata\MediaBundle\MediaBundle(),

また

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

skonsoft が述べたように、に名前空間をロードする必要がありますautoload.php。FOQ.Elastica で同じ問題が発生し、以下を追加して解決しました。

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

于 2013-02-25T22:53:27.437 に答える