Dépannage “Le contrôleur pour URI n'est pas appelable” erreur
Je suis en train de travailler sur Symfony 2.3 et j'ai déclaré une nouvelle route et de nouvelles contrôleur, mais quand je l'appelle ce contrôleur à partir du navigateur, j'obtiens cette erreur:
The controller for URI "/user/1" is not callable. in /dev.mydomain.org/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php at line 82
C'est mon simple route configuration:
user_homepage:
pattern: /user
defaults: { _controller: UserBundle:Default:index }
user_show:
pattern: /user/{id}
defaults: { _controller: UserBundle:Default:show }
requirements:
id: \d+
Et c'est ma très simple contrôleur:
public function showUserAction($id)
{
return $this->render('UserBundle:Default:show.html.twig', array());
}
Quel est le problème?
Vous devez vous connecter pour publier un commentaire.
Le nom logique
UserBundle:Default:show
se réfère àUserBunde\Controller\DefaultController::showAction
vous avez une méthode appeléeshowUserAction
.Soit de changer le nom de la méthode à
showAction
ou modifier le nom logique deUserBundle:Default:showUser
.Bien que n'étant pas pertinentes pour l'exemple donné, cette erreur peut également être due à l'Action du contrôleur n'est pas public
Vous êtes à la définition de votre fonction de contrôleur comme
showUserAction
tandis que dans la définition de votre disant que c'estshow[Action]
.Soit modifier votre itinéraire de configuration
ou modifier votre contrôleur de signature
Voir si cela permet de
Après les grands de recherche, cela a fonctionné pour moi:
1.- Créer CRUDController
2.- Créer le service
3.- Créer le modèle pour le bouton d'action
4.- Configurer route
5.- Vider le cache
Espère que cela aide
Pas le cas ici. Mais il y a une autre question:
Si vous oubliez l '"Action" suffixe tout le monde doit travailler. Mais lorsque vous avez réalisé que vous oubliez le suffixe puis l'ajouter ... surprise! Même erreur que les OP.
Le problème ici, c'est sur la mise en cache
Symfony crée deux fichiers pour la mise en cache des urls:
Si vous modifiez votre nom d'action (c'est à dire l'ajout de "l'Action" suffixe) alors que le cache de l'info, c'est obsolète.
Solution
Similaire à la accepté de répondre, si votre contrôleur est défini comme un service, par exemple (en YAML):
Et votre itinéraire utilise ce contrôleur de service:
Ensuite, il est nécessaire de le nom de la méthode d'action en plein y compris la
Action
suffixe, sinon vous obtiendrez le "contrôleur de ... n'est pas appelable" erreur.Dans mon cas, j'ai été en utilisant symfony 2.
Avant la version de symfony maintenir méthode convention de nommage. Méthode suffixe doit contenir Action mot.
exemple:
en route fichier yml la définition de la méthode a été
et dans le contrôleur de la méthode a été
donc j'obtenais l'erreur.
Après avoir changé le nom de la méthode à
public function makeAuthorizationAction
il a parfaitement fonctionné.Je voudrais partager mon expérience & comment je l'ai résolu:
J'ai été de l'importation d'un lot dans une application dont les itinéraires ont été définis à l'aide d'annotations et ils ont l'importation d'amende, en application trop en utilisant:
Mais depuis mon bundle contrôleurs ont été définis à l'aide de services, Symfony a été montre l'erreur:
J'ai mis à jour mon bundle pour le routage d'utiliser le routage.fichier yaml sur les annotations et se référant à des contrôleurs de
service::method
syntaxe et puis cette erreur a disparu.Faisceau de routes doivent être importés à l'aide d'
Espère que cela va sauver quelqu'un moment.
L'une des raisons de cette erreur est que vous avez oublié d'ajouter le mot "Action" après la méthode du contrôleur nom. Si vous pensez que votre routage est OK, vérifiez le nom de la méthode.