【问题标题】:Symfony 2 controller is not callable?Symfony 2 控制器不可调用?
【发布时间】:2016-02-23 11:36:39
【问题描述】:

Symfony 在访问其关联的 URI 时抛出此异常:

控制器 "Backend\ChatBundle\Controller\DefaultController::generateAction" 为 URI "/chat/generate/2" 不可调用。

这是相关的控制器代码:

/**
 * Class DefaultController
 * @package Backend\ChatBundle\Controller
 * @Route("/chat")
 */
class DefaultController extends BaseController
{

/**
 * @Route("/generate/{id}", requirements={"id":"\d+"}, name="backend_chat_default_create")
 */
public function generateAction(User $user)
{

我尝试清除缓存目录并更改方法和路由的名称无济于事。

【问题讨论】:

  • 你能显示路由文件吗?
  • 您在 DefaultController (/chat) 和路由文件 (/) 中都定义了前缀吗?
  • 使用php app/console debug:router(或以前版本中的php app/console router:debug)查看可用路线

标签: symfony


【解决方案1】:

http://pastebin.com/jgcpK5V8 第 4 行和第 12 行具有相同的 prefix /。这就是问题所在。您可以更改第 4 行 prefix : /chat。 您不能为多个控制器提供相同的 / 相同前缀。 编辑: 请注意,路由名称只是路由文件中指定的“backend_chat”。

class DefaultController extends BaseController
{
    /**
     * @Route("/chat/generate/{id}", requirements={"id":"\d+"}, name="backend_chat") 
     */
    public function generateAction(User $user)
    {
        // some code here
    }

在你的路由文件中添加这样的

backend_chat:
    path:     /chat
    defaults: { _controller: DemoDemoBundle:Default:generate }

【讨论】:

  • 这里/是根。
  • 但是如果我更改“/”-“/chat”并删除控制器中的@Route(“/chat”),这不能解决我的问题,控制器不可调用。如果我不删除控制器 SF 中的注释 Route,则返回 404。
  • 你已经给了路由名称 name="backend_chat_default_create" ,但是在 rounting.yml 文件中它只是 backend_chat 这也是一个原因。确保路由名称与路由文件和控制器方法中的相同。路径和名称不同!
  • 我只想使用注解,我不能使用 yaml 语法来路由路径和设置控制器。
  • 只需将控制器name="backend_chat_default_create"中的名称更改为与您在路由文件中提供的路由相同!您共享的路由文件是 yml。所以我提到的代码将起作用。阅读文档以供参考!
猜你喜欢
  • 1970-01-01
  • 2013-06-28
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多