2013-09-29 80 views
3

這是我的第一個問題,除了我不是英語母語的人,提前爲新手的錯誤很抱歉...Symfony2的文件是不是在這

我開始與Symfony2中,我一直在面對自動加載問題一兩天,我越來越瘋狂..

我只是想在我的AppBundle的DefaultController內使用PHP類。我讀過這樣做的方法是在我的config.yml中創建一個服務,併爲該類匹配命名空間。

Symfony的告訴我,它並找到該文件,但該類不是在裏面,確切的錯誤是:

The autoloader expected class "Priceget\CollectorBundle\Crawler\Amazon" to be defined in file "/srv/www/lol.com/public_html/priceget/symfony/src/Priceget/CollectorBundle/Crawler/Amazon.php". The file was found but the class was not in it, the class name or namespace probably has a typo.

而我的班就是這樣的:

<?php 

namespace Priceget\CollectorBundle\Crawler\Amazon; 

use Symfony\Component\HttpFoundation\Response; 

class Amazon 
{ 

    public function getAll() 
    { 
     return new Response('l0l'); 
    } 
} 

在我DefaultController我打電話會這樣:

<?php 

namespace Priceget\CollectorBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Guzzle\Http\Client; 
use Symfony\Component\DomCrawler\Crawler; 
use Priceget\CollectorBundle\Crawler\Amazon; 

class DefaultController extends Controller 
{ 

    public function indexAction() 
    { 
     $amazon = $this->get('amazon.crawler'); 
    } 
} 

而且我config.yml片:

services: 
    amazon.crawler: 
     class: Priceget\CollectorBundle\Crawler\Amazon 

我已經試過:

  • 清空緩存
  • 重新啓動Apache
  • 擴展類控制器? :-Z

非常感謝你提前。

回答

9

你的命名空間是錯誤的,其重命名爲:

來自:namespace Priceget\CollectorBundle\Crawler\Amazon;

到:namespace Priceget\CollectorBundle\Crawler;

+0

通過這樣做,它返回文件未找到,自動加載錯誤。順便說一句,我的文件夾結構是:src/Priceget/CollectorBundle/Crawler/Amazon。任何建議? – manelgarcia

+0

如果你有「亞馬遜」文件夾和「Amazon.php」文件,那麼你需要將服務類定義更改爲:'Priceget \ CollectorBundle \ Crawler \ Amazon \ Amazon' –

+0

我不想,我錯過了.php文件:P文件結構是:src/Priceget/CollectorBundle/Crawler/Amazon。PHP,如果我擺脫'亞馬遜'系統引發:FatalErrorException:錯誤:類'Priceget \ CollectorBundle \ Crawler'找不到/srv/www/domain.es/public_html/priceget/symfony/app/cache/dev/ appDevDebugProjectContainer.php – manelgarcia

0

除了什麼是由Igor說,你顯然必須在服務改變FQN類名聲明(YML)如果你想要它的工作。

+0

Amazon.php類位於:src/Priceget/CollectorBundle/Crawler /中,通過更改Igor建議的命名空間,Symfony引發了一個Class not found錯誤。也許我錯過了一些基礎知識? FQN的含義是什麼? (對新手提問感到抱歉) – manelgarcia

+0

FQN代表「Fully Qualified Name」,這意味着具有名稱空間的類名稱。這只是在兩個地方改變classname的問題:在類聲明本身(php)和服務聲明(yml):) –

+0

Moltesgràcies! ;) – manelgarcia

4

如果您不在文件的開頭放置<?php,也會出現此錯誤。

0

這可能有點誤導,如果您沒有正確地擴展您的課程,也會發生這種情況。在我的例子中,我試圖用不正確的FQN擴展庫:

class FilesRepository extends Doctrine\ORM\EntityRepository 

應該是:

class FilesRepository extends \Doctrine\ORM\EntityRepository 

通知書丟失的反斜槓(\)。

相關問題