[英]PHP Fatal error: Class 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' not found in /var/www/znata.com/app/AppKernel.php on line 47
我按照此文档安装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(),
...
);
}
您知道如何解决此问题吗?
默认情况下,项目根目录不在自动加载路径中,只有“ src”目录。 您可以使用
php app/console sonata:easy-extends:generate --dest=src SonataMediaBundle
在src中生成包或将其简单复制到src中。
调试此问题后,我发现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中注册了名称空间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”命名空间。 因此,也许在使用它们时,我们也应该像应用程序名称空间一样注册它们。
希望对您有帮助。
使用composer,我在composer.json中做到了这一点: "autoload": { "psr-0": { "": "src/", "Application": "app/" } },
我添加了映射“ Application”:“ app /”。 然后运行composer update
这产生了需要的额外自动加载。
在您的composer.json
文件中,具有:
"autoload": { "psr-4": { "AppBundle\\\\": "src/AppBundle", "Application\\\\": "src/Application" }, }
做一个简单的:
composer dump-autoload
重新生成自动加载文件。
new Application\Sonata\MediaBundle\MediaBundle(),
要么
new Application\Sonata\MediaBundle\SonataMediaBundle(),
如skonsoft所述,您需要在autoload.php
中autoload.php
名称空间。 我在FOQ.Elastica中遇到了同样的问题,并通过添加以下内容解决了它。
$loader->add('FOQ', __DIR__.'/../vendor/bundles');
您还可以使用应用程序名称空间前缀,以便程序包位于名称空间下
bin/console sonata:easy-extends:generate --dest=src SonataMediaBundle --namespace_prefix=App
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.