Symfony 2.1 @Template注释引发500内部服务器错误

时间:2012-12-13 12:34:27

标签: php templates annotations symfony-2.1

我正在使用PHP 5.4.7开发最新版Symfony 2.1.4的新项目。

我浏览了自述文件,传递了app/check.php和配置,Acme Demo运行正常,每个页面都经过测试。

然后,我添加了自己的包,编辑了app/AppKernl.phpapp/routing.yml,因此它从我的包中加载了我自己的routing.yml,并测试了我的indexAction() SetupController

return $this->render('MyBundle:Setup:index.html.twig');

页面按预期显示。

然后我将其更改为使用注释,因此Controller文件变为

// ...
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

// ...

class SetupController extends Controller
{
    /**
     * @Route("/", name="_setup")
     * @Template
     */
    public function indexAction(){
        // This method is totally empty.

        // Uncommenting the following line actually works, but I want to stick with
        // annotations if possible

        // return $this->render('MyBundle:Setup:index.html.twig');
    }
}

路由文件变为

_setup:
    resource: "@MyBundle/Controller/SetupController.php"
    type:     annotation

现在页面抛出500内部服务器错误(LogicException),并显示以下消息:

The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?

我尝试将$this->render('...')行添加到indexAction(),页面呈现,但没有它只是这500个错误。

Acme演示仍然运行得很漂亮。我尝试使用@Template('MyBundle:Setup:index.html.twig')@Template()代替@Template,但仍然会出现同样的错误。模板文件放置在正确的位置,因为$this->render()方法没有问题。

我检查过并确保没有关闭任何配置文件中的注释。我也尝试清除缓存,包括dev和prod,但仍然没有运气。

我可以使用$this->render()作为解决方法,但我想知道Symfony不允许我使用它的注释有什么问题。

预先感谢您提供任何帮助或建议!如果我能提供任何其他信息,请告知我们。

2 个答案:

答案 0 :(得分:2)

使用@Template注释时,您需要返回将传递给模板的array()个变量。

如果您没有变量而不仅仅是return array()

答案 1 :(得分:0)

您应该始终返回Response - $this - render( someTemplate )实际执行的操作。如果您不想退货:

return new Response;

和symfony会很高兴。

{ResponseSymfony\Component\HttpFoundation包中提供了您的知识。]