扩展Symfony2控制器解析器


Extending Symfony2 Controller Resolver

我目前正在创建一个bundle,如果请求是Ajax请求,可以将fooAction重命名为fooAjaxAction。正如这个问题的答案所说,我必须扩展控制器解析器类。如果我在配置中更改controller_resolver.class,我有一个ResourceNotFoundException。yml。但如果我不这样做,我不会有任何错误(但没有重写,所以这不是我想要的)

我的问题是:我如何注册我的新控制器解析器并使用它?我说的对吗?

这是我所做的:

你可以在packagist中找到我的测试包,并通过

下载

composer require "/prefix-bundle":"dev-dev"

在AppKernel.php中激活:

<?php 
// AppKernel.php
new 'PrefixBundle'PrefixBundle()

设置
# App/Config/config.yml
parameters:
    controller_resolver.class: PrefixBundle'Component'Controller'ControllerResolver

这是我的自定义控制器

<?php 
namespace 'PrefixBundle'Component'Controller;
use Symfony'Component'HttpKernel'ControllerControllerResolver as BaseControllerResolver;
use Symfony'Component'HttpFoundation'Request;
class ControllerResolver extends BaseControllerResolver
{
    public function getArguments(Request $request, $controller)
    {
        parent::getArguments($request, $controller);
    }
}

我假设这个控制器不做任何事情,例如,我将在将来添加逻辑。

返回从getArguments方法(由于我错过了它,当我做了另一个答案)意味着控制器解析器实际上没有得到任何参数来解决。

public function getArguments(Request $request, $controller)
{
    // Should have the return..
    return parent::getArguments($request, $controller);
}