2

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

我浏览了自述文件,通过了app/check.php配置,Acme Demo 运行良好,每个页面都经过测试。

然后,我添加了我自己的包,编辑了app/AppKernl.php,然后app/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 Internal Server Error (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 Demo 仍然运行良好。我尝试使用@Template('MyBundle:Setup:index.html.twig')and@Template()而不是@Template,仍然出现相同的错误。模板文件放置在正确的位置,因为该$this->render()方法发现它没有问题。

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

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

提前感谢您的任何帮助或建议!如果有任何其他信息可以提供帮助,请告诉我。

4

2 回答 2

2

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

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

于 2012-12-13T16:50:21.063 回答
0

你应该总是返回一个-实际做的Response事情。$this - render( someTemplate )如果您不想退货:

return new Response;

symfony 会很高兴。

[为了您的知识Response,放在Symfony\Component\HttpFoundation包装中。]

于 2012-12-13T12:56:17.207 回答