PHP 致命错误:在第 47 行的 /var/www/znata.com/app/AppKernel.php 中找不到类 'Application\Sonata\MediaBundle\Applica
Posted
技术标签:
【中文标题】PHP 致命错误:在第 47 行的 /var/www/znata.com/app/AppKernel.php 中找不到类 \'Application\\Sonata\\MediaBundle\\ApplicationSonataMediaBundle\'【英文标题】:PHP Fatal error: Class 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' not found in /var/www/znata.com/app/AppKernel.php on line 47PHP 致命错误:在第 47 行的 /var/www/znata.com/app/AppKernel.php 中找不到类 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' 【发布时间】:2012-08-29 16:03:13 【问题描述】:我按照this doc 安装 SonataMediaBundle 但我收到此错误:
php Fatal error: Class 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' not found in /var/www/znata.com/app/AppKernel.php on line 47
使用奏鸣曲命令生成app后:
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】:你也可以使用你的应用命名空间前缀,这样包就在你的命名空间下
bin/console sonata:easy-extends:generate --dest=src SonataMediaBundle --namespace_prefix=App
【讨论】:
【参考方案2】:在您的 composer.json
文件中,有:
"autoload":
"psr-4":
"AppBundle\\": "src/AppBundle",
"Application\\": "src/Application"
,
做一个简单的:
composer dump-autoload
重新生成自动加载文件。
【讨论】:
感谢完美,但我更喜欢保留捆绑逻辑:"Application\\": "src/Application" --> "Application\\Sonata\\UserBundle\\": "src/Application/Sonata/UserBundle"
【参考方案3】:
使用 composer 我在 composer.json 中执行此操作:
"autoload":
"psr-0":
"": "src/",
"Application": "app/"
,
我添加了映射“Application”:“app/”。
然后运行
composer update
这会产生额外的自动加载需求。
【讨论】:
【参考方案4】:正如 skonsoft 提到的,您需要在 autoload.php
中加载命名空间。我在使用 FOQ.Elastica 时遇到了同样的问题,并通过添加以下内容解决了它。
$loader->add('FOQ', __DIR__.'/../vendor/bundles');
【讨论】:
【参考方案5】:默认项目根目录不在自动加载路径中,只有“src”目录。 你可以使用
php app/console sonata:easy-extends:generate --dest=src SonataMediaBundle
在 src 中生成 bundle 或简单地将其复制到 src。
【讨论】:
【参考方案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 中注册了命名空间应用程序,它工作正常。
所以,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”命名空间。所以也许,在使用它们的时候,我们也应该像应用程序命名空间一样注册它们。
希望对你有所帮助。
【讨论】:
【参考方案7】:new Application\Sonata\MediaBundle\MediaBundle(),
或
new Application\Sonata\MediaBundle\SonataMediaBundle(),
【讨论】:
以上是关于PHP 致命错误:在第 47 行的 /var/www/znata.com/app/AppKernel.php 中找不到类 'Application\Sonata\MediaBundle\Applica的主要内容,如果未能解决你的问题,请参考以下文章
PHP 致命错误:在第 45 行的 admin\includes\html\database.class.php 中的非对象上调用成员函数 prepare()
困惑:PHP 致命错误:在第 0 行的未知中抛出没有堆栈帧的异常?
致命错误:在第 11 行的 E:\xampp\htdocs\teach\mongo\index.php 中找不到类 'MongoClient' - Mongodb + XAMPP
如何解决这个错误?致命错误:在第X行的... / magento18 / lib / Zend / Uri.php中调用未定义的函数ctype_alnum()?
致命错误:在第 146 行的 ...\..\Abstract.php 中找不到类“Mage_Enterprise_Giftwrapping_Block_Adminhtml_Product_Helper
致命错误:在第 697 行的 /home/user1/public_html/go-pear.php 中找不到类“PEAR”