PHP Неустранимая ошибка: Class 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' не найдена в /var/www/znata.com/app/AppKernel.php в строке 47
i следил за этим документом для установки 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(),
...
);
}
У вас есть идея, как решить эту проблему?
Ответы
Ответ 1
По умолчанию корневой каталог проекта не находится в пути автозагрузки, а только в директории "src".
Вы можете использовать
php app/console sonata:easy-extends:generate --dest=src SonataMediaBundle
чтобы сгенерировать связывание в src или просто скопировать его в src.
Ответ 2
После отладки этой проблемы я обнаружил, что приложение 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 они говорили также о пространствах имен "Представьте", "Гюффретте" и "Базз". Таким образом, при использовании, мы должны регистрировать их также как пространство имен приложений.
Я надеюсь, что это поможет вам.
Ответ 3
Используя композитор, я сделал это в composer.json:
"autoload": {
"psr-0": {
"": "src/",
"Application": "app/"
}
},
Я добавил отображение "Приложение": "app/".
А затем запустите
composer update
Это вызвало дополнительную автозагрузку.
Ответ 4
new Application\Sonata\MediaBundle\MediaBundle(),
или
new Application\Sonata\MediaBundle\SonataMediaBundle(),
Ответ 5
Как указано в skonsoft, вам нужно загрузить пространства имен в autoload.php
. У меня была такая же проблема с FOQ.Elastica и разрешили ее, добавив следующее.
$loader->add('FOQ', __DIR__.'/../vendor/bundles');