我跟着this doc安装了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(),
...
);
}
您知道如何解决此问题吗?
答案 0 :(得分:9)
默认情况下,项目根目录不在自动加载路径中,只有“src”目录。 你可以使用
php app/console sonata:easy-extends:generate --dest=src SonataMediaBundle
在src中生成bundle或简单地将它复制到src。
答案 1 :(得分: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中注册了名称空间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”命名空间。因此,perhapes在使用它们时,我们应该像Application namespace一样注册它们。
我希望这会对你有所帮助。
答案 2 :(得分:1)
使用作曲家我在composer.json中这样做了:
"autoload": {
"psr-0": {
"": "src/",
"Application": "app/"
}
},
我添加了映射“Application”:“app /”。
然后运行
composer update
这需要额外的自动加载。
答案 3 :(得分:1)
在composer.json
文件中,有:
"autoload": {
"psr-4": {
"AppBundle\\": "src/AppBundle",
"Application\\": "src/Application"
},
}
做一个简单的事:
composer dump-autoload
重新生成自动加载文件。
答案 4 :(得分:0)
new Application\Sonata\MediaBundle\MediaBundle(),
或
new Application\Sonata\MediaBundle\SonataMediaBundle(),
答案 5 :(得分:0)
正如skonsoft所提到的,您需要在autoload.php
中加载名称空间。我对FOQ.Elastica有同样的问题,并通过添加以下内容解决了这个问题。
$loader->add('FOQ', __DIR__.'/../vendor/bundles');
答案 6 :(得分:0)
您还可以使用app命名空间前缀,以便包位于命名空间
下 bin/console sonata:easy-extends:generate --dest=src SonataMediaBundle --namespace_prefix=App