我想在我的应用程序中使用以下代码:
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,您可以创建一个事件侦听器并使用响应事件以某种方式更改响应。但是,我不确定如何从事件侦听器访问视图数据。