2012-09-05 40 views
12

我跟着this doc安裝SonataMediaBundle但我得到了這個錯誤:PHP致命錯誤:Class'Application Sonata MediaBundle ApplicationSonataMediaBundle'找不到在/var/www/znata.com/app/AppKernel.php 47行

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

使用奏命令後噸生成應用:

apps/Application/Sonata/MediaBundle 
:下產生

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

新的目錄

一切都完成了,但是當我在我的AppKernel.php中註冊生成的應用程序時,出現了該錯誤。

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

你有什麼想法如何解決這個問題?

+0

你能準確描述你的包的路徑嗎? – DonCallisto

回答

0
new Application\Sonata\MediaBundle\MediaBundle(), 

new Application\Sonata\MediaBundle\SonataMediaBundle(), 
+0

不,它不起作用。 – skonsoft

6

調試這個問題後,我發現namspace應用程序不registred。

在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; 

有了這個新的配置一切都在fine.But SF2.0,他們也談到了「想象」,「Guffrette」和「嗡嗡」命名空間。因此,使用它們時,我們應該註冊它們,就像Application命名空間一樣。

我希望這可以幫助你。

9

默認情況下,項目根目錄不在自動加載路徑中,只有「src」目錄。 您可以使用

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

生成在src或將其複製到src簡單捆綁。

0

正如skonsoft提到的那樣,您需要加載autoload.php中的命名空間。我遇到了與FOQ.Elastica相同的問題,並通過添加以下內容來解決它。

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

1

使用作曲家我在composer.json這樣做: "autoload": { "psr-0": { "": "src/", "Application": "app/" } },

我添加映射 「應用程序」: 「應用程序/」。 然後運行 composer update

這產生了額外的自動加載需要。

相關問題