Php 扩展控制器-但如何激活它?(Symfony 2)
我想在我的应用程序中使用以下代码:Php 扩展控制器-但如何激活它?(Symfony 2),php,symfony,Php,Symfony,我想在我的应用程序中使用以下代码: class ControllerExtension extends Symfony\Bundle\FrameworkBundle\Controller\Controller { public function render($view, array $parameters = array(), Response $response = null) { //etc. } } 但我应该把它放在哪里,如何激活它?我猜
class ControllerExtension extends Symfony\Bundle\FrameworkBundle\Controller\Controller
{
public function render($view, array $parameters = array(), Response $response = null)
{
//etc.
}
}
但我应该把它放在哪里,如何激活它?我猜这与services.yml文件有关。我使用了事件侦听器,但这显然是不同的。您可以将它放在捆绑包的控制器目录中,即
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,则可以使用和以某种方式更改响应。但是,我不确定您将如何从事件侦听器访问视图数据。从代码片段()中,您似乎错过了对父级的调用中的“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(...);
}
}
嗨,谢谢,但我仍在努力让它发挥作用。基本上,我只想覆盖项目中的“每一个”控制器。它只会执行一个小动作。就像我在services.yml中激活了一个对每个请求都运行的请求侦听器一样,我希望它对每个请求都运行,但我无法让它运行。您可能希望用更多的细节更新您的问题…您希望对每个请求运行什么。可能有一种比使用控制器类更简单的方法。类似这样:-我只是无法运行代码(以获取类)是您想要做的:如果请求的格式是json,则呈现json响应,否则通过twig模板呈现html?是的,这是我想要做的,但我看不到代码放在哪里(可以说是激活它)。