我想在我的应用程序中使用此代码:
class ControllerExtension extends Symfony\Bundle\FrameworkBundle\Controller\Controller
{
public function render($view, array $parameters = array(), Response $response = null)
{
//etc.
}
}
但是我把它放在哪里以及如何激活它?我猜它与services.yml文件有关。我使用过Event Listeners,但这显然是不同的。
答案 0 :(得分: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(...);
}
}
答案 1 :(得分:0)
您可以将它放在捆绑包的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
{
...
如果你真正想要的是覆盖另一个包的控制器,请参阅描述overriding controllers的食谱。
修改:
据我所知,没有办法让这个控制器以某种方式生效。您可以按照我上面的说明对每个控制器进行扩展。
如果格式为json,您可以create an event listener并使用response event以某种方式更改响应。但是,我不确定如何从事件监听器访问视图数据。