扩展控制器-但如何激活它?(Symfony 2)


Extend controller - but how activate it? (Symfony 2)

我想在我的应用程序中使用以下代码:

class ControllerExtension extends Symfony'Bundle'FrameworkBundle'Controller'Controller 
{
    public function render($view, array $parameters = array(), Response $response = null)
    {
        //etc.
    }
}

但是我把它放在哪里,我怎么激活它?我猜这和服务有关。yml文件。我已经使用了事件侦听器,但这显然是不同的。

从你的代码片段(http://justpaste.it/2caz),似乎你错过了"返回"关键字在你的调用父

class ControllerExtension extends Symfony'Bundle'FrameworkBundle'Controller'Controller 
{
    public function render($view, array $parameters = array(), Response $response = null)
    {
        if($this->getRequest()->getRequestFormat() == 'json') {
            return new Response(json_encode($parameters));
        } else {
            // Missing 'return' in your snippet
            return parent::render($view, $parameters, $response);
        }
    }
}
class MyController extends ControllerExtension
{
    public function indexAction()
    {
        // This should now work
        return $this->render(...);
    }
}

你可以把它放在你的bundle的Controller目录下,也就是src/YourNamespace/YourBundleName/Controller/ControllerExtension.php。确保在该文件中提供适当的名称空间:

namespace YourNamespace'YourBundleName'Controller;
class ControllerExtension extends Symfony'Bundle'FrameworkBundle'Controller'Controller
{
...

要使用它,可以在src/YourNamespace/YourBundlename/Resources/config/routing.yml

中为它创建一个路由

扩展:

namespace YourNamespace'YourBundleName'Controller;
class OtherController extends ControllerExtension
{
...

如果你真正想做的是重写另一个bundle的控制器,请参阅关于重写控制器的烹饪书。

编辑:

据我所知,没有办法让这个控制器以某种方式自动生效。您可以让您的每个控制器扩展它,正如我上面所指出的。

如果格式是json,您可以创建一个事件侦听器并使用响应事件以某种方式更改响应。但是,我不确定如何从事件侦听器访问视图数据。