发现Symfony2文件类不在其中

时间:2013-09-29 17:04:21

标签: php symfony service autoload

这是我的第一个问题,除了我不是英语母语者,所以提前抱歉新手错误......

我从Symfony2开始,几天来我一直面临自动加载问题,我疯了......

我只是想在我的AppBundle的DefaultController中使用PHP类。我已经阅读过这样做的方法是在我的config.yml中创建一个服务,并为该匹配的类提供一个命名空间。

Symfony告诉我它确实找到了该文件,但该类不在其中,确切的错误是:

  

自动加载器预期类“Priceget \ CollectorBundle \ Crawler \ Amazon”将在文件“/srv/www/lol.com/public_html/priceget/symfony/src/Priceget/CollectorBundle/Crawler/Amazon.php”中定义。找到了该文件,但该类不在其中,类名或命名空间可能有拼写错误。

我的课就是这样:

<?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
  • 将课程扩展到Controller? :-Z

提前非常感谢你。

4 个答案:

答案 0 :(得分:11)

您的命名空间错误,请重命名:

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

至:namespace Priceget\CollectorBundle\Crawler;

答案 1 :(得分:5)

如果您未将<?php放在文件的开头,也会发生此错误。

答案 2 :(得分:1)

除了Igor所说的,如果你想让它工作,你显然必须在服务声明(YML)中更改FQN类名。

答案 3 :(得分:1)

这可能有点误导,如果你没有正确地扩展你的课程,也会发生这种情况。在我的实例中,我尝试使用不正确的FQN扩展存储库:

let locations = [
["title": "New York, NY",    "latitude": 40.713054, "longitude": -74.007228],
["title": "Los Angeles, CA", "latitude": 34.052238, "longitude": -118.243344],
["title": "Chicago, IL",     "latitude": 41.883229, "longitude": -87.632398]
]

for location in locations {
let annotation = MKPointAnnotation()
annotation.title = location["title"] as? String
annotation.coordinate = CLLocationCoordinate2D(latitude: location["latitude"] as! Double, longitude: location["longitude"] as! Double)
mapView.addAnnotation(annotation)
}

应该是:

class FilesRepository extends Doctrine\ORM\EntityRepository

注意缺少反斜杠(class FilesRepository extends \Doctrine\ORM\EntityRepository )。