使用@Template批注时,“控制器必须返回响应”

时间:2018-06-26 22:40:38

标签: symfony annotations twig

使用Symfony框架:

"sensio/framework-extra-bundle": "^5.1" + "symfony/framework-bundle": "^4.1" 使用默认配置。

收到错误:The controller must return a response (Array() given).

示例代码:

use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

/**
 * @Route("/")
 */
class IndexController extends Controller
{
    /**
     * @Route("", name="index")
     * @Template()
     */
    public function index()
    {
        return [];
    }
}

我尝试添加:

sensio_framework_extra:
   view:
      annotations: true

但这不起作用

我有一个与"symfony/framework-bundle": "^4.0"相同的示例项目,并且可以正常工作。

2 个答案:

答案 0 :(得分:0)

看看@Template annotation documentation。它指出:

  

从捆绑软件的4.0版本开始,@ Template注释仅支持Twig(并且仅当与Symfony模板组件一起使用时-在模板中未设置templating条目) framework配置设置。

我想您正在使用Symfony模板组件,在这种情况下将无法使用。或者,您可能也没有正确命名模板文件-应该以控制器和操作名称命名。

还是更好,看看Symfony's Best Practices for Templates,它建议您将模板存储在根项目的templates/目录中,而不是捆绑软件的Resources/views/文件夹中。这意味着您不再引用@App/Index/Index.html之类的模板,也不再使用神奇的@Template注释。相反,您可以像这样从控制器中显式调用模板:

/**
 * @Route("", name="index")
 */
public function index()
{
    return $this->render('index/index.html.twig');
}

最后,这似乎很明显,但是请确保在项目(composer require symfony/twig-bundle中安装了Twig。

答案 1 :(得分:0)

事实证明,我是从头开始创建一个新项目的,但是没有使用通常会安装所有依赖项的symfony/website-skeleton软件包。因此,不仅仅是我的@Template注释不起作用,还因为没有安装Twig,没有模板在起作用。

我运行了composer require twig-bundle命令,它解决了问题。