Symfony2 File Found Class Was Not In It

匿名 (未验证) 提交于 2019-12-03 00:52:01

问题:

This is my first question, besides I'm not english-native speaker, so sorry in advance for newbie mistakes...

I'm starting with Symfony2, and I've been facing an autoload problem for a couple of days, i'm getting crazy..

I'm just trying to use a PHP class inside my DefaultController of my AppBundle. I've read the way of doing this is by creating a service in my config.yml and giving a namespace to that class that matches.

Symfony tells me that it does found the file but the class is not in it, the exact error is:

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.

And my class is just this:

<?php  namespace Priceget\CollectorBundle\Crawler\Amazon;  use Symfony\Component\HttpFoundation\Response;  class Amazon {      public function getAll()     {         return new Response('l0l');     } } 

In my DefaultController I'm calling it like that:

<?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');     } } 

And my config.yml piece:

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

I've already tried to:

  • Empty cache
  • Restart apache
  • Extend the class to Controller? :-Z

Thank you so much in advance.

回答1:

Your namespace is wrong, rename it:

from: namespace Priceget\CollectorBundle\Crawler\Amazon;

to: namespace Priceget\CollectorBundle\Crawler;



回答2:

This error also occurs if you do not put <?php in the beginning of the file.



回答3:

In addition to what's said by Igor, you obviously have to change the FQN class name in the service declaration (YML) if you want it to work.



回答4:

This can be a bit misleading, it also happens if you don't extend your class correctly. In my instance I tried to extend a repository with an incorrect FQN:

class FilesRepository extends Doctrine\ORM\EntityRepository 

should have been:

class FilesRepository extends \Doctrine\ORM\EntityRepository 

Notice the missing backslash (\).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!