0

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

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

        //etc.

    }

}

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

4

2 回答 2

2

从您的代码片段(http://justpaste.it/2caz)来看,您似乎错过了对父级的调用中的“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(...);
    }
}
于 2013-04-08T18:42:40.277 回答
0

你可以把它放在你的包的控制器目录中,即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
{
...

如果您真正想要做的是覆盖另一个包的控制器,请参阅描述覆盖控制器的说明书。

编辑

据我所知,没有办法自动使这个控制器以某种方式生效。你可以让你的每个控制器扩展它,就像我上面指出的那样。

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

于 2013-04-06T01:03:11.233 回答