我正在使用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内部服务器错误(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不允许我使用它的注释有什么问题。
预先感谢您提供任何帮助或建议!如果我能提供任何其他信息,请告知我们。
答案 0 :(得分:2)
使用@Template
注释时,您需要返回将传递给模板的array()
个变量。
如果您没有变量而不仅仅是return array()
答案 1 :(得分:0)
您应该始终返回Response
- $this - render( someTemplate )
实际执行的操作。如果您不想退货:
return new Response;
和symfony会很高兴。
{Response
在Symfony\Component\HttpFoundation
包中提供了您的知识。]