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

Php 扩展控制器-但如何激活它?(Symfony 2),php,symfony,Php,Symfony,我想在我的应用程序中使用以下代码: class ControllerExtension extends Symfony\Bundle\FrameworkBundle\Controller\Controller { public function render($view, array $parameters = array(), Response $response = null) { //etc. } } 但我应该把它放在哪里,如何激活它?我猜

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

class ControllerExtension extends Symfony\Bundle\FrameworkBundle\Controller\Controller 
{
    public function render($view, array $parameters = array(), Response $response = null)
    {

        //etc.

    }

}

但我应该把它放在哪里,如何激活它?我猜这与services.yml文件有关。我使用了事件侦听器,但这显然是不同的。

您可以将它放在捆绑包的控制器目录中,即
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,则可以使用和以某种方式更改响应。但是,我不确定您将如何从事件侦听器访问视图数据。

从代码片段()中,您似乎错过了对父级的调用中的“return”关键字

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(...);
    }
}

嗨,谢谢,但我仍在努力让它发挥作用。基本上,我只想覆盖项目中的“每一个”控制器。它只会执行一个小动作。就像我在services.yml中激活了一个对每个请求都运行的请求侦听器一样,我希望它对每个请求都运行,但我无法让它运行。您可能希望用更多的细节更新您的问题…您希望对每个请求运行什么。可能有一种比使用控制器类更简单的方法。类似这样:-我只是无法运行代码(以获取类)是您想要做的:如果请求的格式是json,则呈现json响应,否则通过twig模板呈现html?是的,这是我想要做的,但我看不到代码放在哪里(可以说是激活它)。