[英]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.