2013-09-29 48 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 

通知书丢失的反斜杠(\)。

相关问题