Symfony2 Fichier De Classe N'Était Pas En Elle
C'est ma première question, en plus je ne suis pas l'anglais-langue maternelle, donc désolé par avance pour les erreurs de débutant...
Je commence avec Symfony2, et j'ai été confronté à un autoload problème pour un couple de jours, je m'en fou..
Je suis juste essayer d'utiliser une classe PHP à l'intérieur de mon DefaultController de mon AppBundle. J'ai lu la façon de le faire est par la création d'un service dans ma config.yml et de donner un espace de noms de la classe qui correspond à.
Symfony me dit qu'il ne trouve le fichier, mais la classe n'est pas elle, l'erreur exacte est:
L'autochargeur devrait classe "Priceget\CollectorBundle\Crawler\Amazon" pour être défini dans le fichier "/srv/www/lol.com/public_html/priceget/symfony/src/Priceget/CollectorBundle/Crawler/Amazon.php". Le fichier a été trouvé, mais la classe n'était pas en elle, le nom de la classe ou de l'espace a probablement une faute de frappe.
Et ma classe est juste ceci:
<?php
namespace Priceget\CollectorBundle\Crawler\Amazon;
use Symfony\Component\HttpFoundation\Response;
class Amazon
{
public function getAll()
{
return new Response('l0l');
}
}
Dans mon DefaultController je vais appeler ça comme ça:
<?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');
}
}
Et ma config.yml pièce:
services:
amazon.crawler:
class: Priceget\CollectorBundle\Crawler\Amazon
J'ai déjà essayé:
- Vider le cache
- Redémarrer apache
- Étendre la classe de Contrôleur? :-Z
Je vous remercie beaucoup à l'avance.
OriginalL'auteur manelgarcia | 2013-09-29
Vous devez vous connecter pour publier un commentaire.
Votre espace de noms est faux, le renommer:
à partir de:
namespace Priceget\CollectorBundle\Crawler\Amazon;
:
namespace Priceget\CollectorBundle\Crawler;
Si vous avez des "Amazon" répertoire "Amazon.php" fichier puis vous avez besoin de changer la classe de service définition:
Priceget\CollectorBundle\Crawler\Amazon\Amazon
Je n'ai pas, j'ai raté le .php morceau 😛 La structure du fichier est: src/Priceget/CollectorBundle/Crawler/Amazon.php et si je me débarrasser de "Amazone" système soulève un: FatalErrorException: Error: Class 'Priceget\CollectorBundle\Crawler' ne trouve pas dans /srv/www/domain.es/public_html/priceget/symfony/app/cache/dev/appDevDebugProjectContainer.php
Vous avez été à 100%, le problème est que je suis tellement stupide que je était de se débarrasser de l'Amazonie à la config.yml ^^ Donc cette Exception..
Manquant php balise d'ouverture peut également provoquer cette erreur.
OriginalL'auteur Igor Pantović
Cette erreur se produit également si vous ne mettez pas
<?php
dans le début du fichier.OriginalL'auteur Anton Andreev
En plus de ce qui est dit par Igor, vous avez évidemment à changer la FQN nom de la classe dans le service de déclaration (YML) si vous le souhaitez.
FQN signifie "Nom complet", ce qui signifie le nom de la classe avec l'espace de noms. C'est seulement une question de changer le nom de la classe dans les deux endroits: dans la déclaration de classe (php) et dans la déclaration de service (yml) 🙂
Moltes gràcies! 😉
OriginalL'auteur Christian Soronellas Vallespí
Cela peut être un peu trompeur, c'est également le cas si vous n'avez pas prolonger votre classe correctement. Dans mon exemple j'ai essayé de prolonger d'un dépôt avec une mauvaise FQN:
:
Avis le manque de barre oblique inverse (
\
).OriginalL'auteur Edward