Неустранимая ошибка PHP: класс «Application\Sonata\MediaBundle\ApplicationSonataMediaBundle» не найден в /var/www/znata.com/app/AppKernel.php в строке 47

я следовал этому документу, чтобы установить SonataMediaBundle, но я получил эту ошибку:

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

После использования команды сонаты создайте приложение:

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

новый каталог был создан в:

apps/Application/Sonata/MediaBundle

все было сделано, но когда я зарегистрировал сгенерированное приложение в своем AppKernel.php, я получил эту ошибку.

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

У вас есть идеи, как решить эту проблему?


person skonsoft    schedule 05.09.2012    source источник
comment
Можете ли вы точно описать путь вашего пакета?   -  person DonCallisto    schedule 05.09.2012


Ответы (6)


По умолчанию корневой каталог проекта не находится в пути автозагрузки, только каталог «src». Ты можешь использовать

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

создать пакет в src или просто скопировать его в src.

person Vyacheslav Enis    schedule 07.09.2012

После отладки этой проблемы я обнаружил, что приложение 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». Поэтому, возможно, при их использовании мы должны зарегистрировать их также как пространство имен приложений.

Я надеюсь, что это поможет вам.

person skonsoft    schedule 05.09.2012

Используя композитор, я сделал это в composer.json: "autoload": { "psr-0": { "": "src/", "Application": "app/" } },

Я добавил сопоставление «Приложение»: «приложение/». А потом запустить composer update

Это потребовало дополнительной автозагрузки.

person Loial    schedule 03.03.2014

  1. внутри вашего файла composer.json есть:

    "autoload": {
        "psr-4": {
            "AppBundle\\": "src/AppBundle",
            "Application\\": "src/Application"
        },
    }
    
  2. сделать простое:

    composer dump-autoload
    

    для повторной генерации файлов автозагрузки.

person Pmpr    schedule 04.04.2018
comment
спасибо, отлично, но я предпочитаю сохранять логику пакета: "Application\\": "src/Application" --> "Application\\Sonata\\UserBundle\\": "src/Application/Sonata/UserBundle" - person William Rossier; 07.04.2018

Как упоминал skonsoft, вам нужно загрузить пространства имен в autoload.php. У меня была такая же проблема с FOQ.Elastica, и я решил ее, добавив следующее.

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

person Mahen    schedule 25.02.2013

Вы также можете использовать префикс пространства имен вашего приложения, чтобы пакет подпадал под ваше пространство имен.

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

person Sumeet    schedule 22.04.2018