Troubleshooting “The controller for URI is not cal

2020-06-30 04:37发布

I'm working on Symfony 2.3 and I declared a new route and new controller, but when I call this controller from the browser I get this error:

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

This is my 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+

And this is my very simple controller:

public function showUserAction($id)
{        
    return $this->render('UserBundle:Default:show.html.twig', array());
}

What is wrong?

9条回答
Deceive 欺骗
2楼-- · 2020-06-30 05:31

Not the case here. But there is another related issue:

If you forget the 'Action' suffix all will work. But when you realized that you forget the suffix and then add it ... surprise! Same error as the OP.

The problem here is about caching

Symfony creates two file for caching urls:

  • AppDevUrlGenerator.php
  • AppDevUrlMatcher.php

If you change your action name (i.e. adding 'Action' suffix) then that cache info is obsolete.

Solution

php app/console cache:clear
查看更多
冷血范
3楼-- · 2020-06-30 05:31

I would like to share my experience & how I solved it:

I was importing one bundle in an application whose routes were defined using annotations and they were importing fine in application too by using:

auth_bundle_routes:
  # loads routes from the given routing file stored in some bundle
  resource: '@XyzAuthBundle/Controller/'
  type:     annotation

But since my bundle controllers were defined using services, Symfony was showing error:

The controller for URI "/facebook/request-code" is not callable. Controller Xyz\AuthBundle\Controller\FacebookController" has required constructor arguments and does not exist in the container. Did you forget to define such a service?

I updated my bundle for routing to use routing.yaml file over annotations and referring to controllers as service::method syntax and then this error is gone.

xyz_auth.facebook_request_code:
  path: /facebook/request-code
  controller: xyz_auth.controller.facebook_controller::requestCode

Bundle routes must be imported using

auth_bundle_routes:
  resource: '@XyzAuthBundle/Resources/config/routing.yaml'

Hope this will save someone's time.

查看更多
放我归山
4楼-- · 2020-06-30 05:36

Similar to the accepted answer, if your controller is defined as a service, e.g. (in YAML):

services:
    user.default:
        class: \UserBundle\DefaultController

And your route uses this controller service:

user_show:
    pattern:  /user/{id}
    defaults: { _controller: user.default:showUserAction }
    requirements:
        id:  \d+

Then it's necessary to name the action method in full including the Action suffix, otherwise you will get the "controller ... is not callable" error.

查看更多
登录 后发表回答