繁体   English   中英

扩展控制器 - 但如何激活它? (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.

    }

}

但是我在哪里放它以及如何激活它? 我猜它与services.yml文件有关。 我使用过Event Listeners,但这显然是不同的。

从您的代码段( 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(...);
    }
}

您可以将它放在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
{
...

如果您实际要查看的是覆盖另一个软件包的控制器,请参阅描述覆盖控制器的手册

编辑

据我所知,没有办法自动使这个控制器以某种方式生效。 您可以按照我上面的说明将每个控制器扩展。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM