这是我的控制者:
/**
* Finds and displays a Formacion entity.
*
* @Route("/{id}/show", name="curso_show")
* @Template()
*/
public function showAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$curso = $em->getRepository('GitekUdaBundle:Curso')->find($id);
if (!$curso) {
throw $this->createNotFoundException('Unable to find Curso entity.');
}
$deleteForm = $this->createDeleteForm($id);
// Detalle Formación
$detcurso = new Detcurso();
$formdetcurso = $this->createForm(new DetcursoType(), $detcurso);
return array(
'curso' => $curso,
'delete_form' => $deleteForm->createView(),
'detcurso' => $detcurso,
'formdetcurso' => $formdetcurso,
);
}
在我的开发环境中工作得很好(Mac)但是当我去我的生产环境(CentOS服务器)时我得到了
The controller must return a response (Array(curso => Object(Gitek\UdaBundle\Entity\Curso), delete_form => Object(Symfony\Component\Form\FormView), detcurso => Object(Gitek\UdaBundle\Entity\Detcurso), formdetcurso => Object(Symfony\Component\Form\Form)) given).
500内部服务器错误 - LogicException
有任何线索吗?
答案 0 :(得分:47)
看起来anotation @Template
不适合您。检查配置http://symfony.com/doc/2.0/bundles/SensioFrameworkExtraBundle/annotations/view.html,http://symfony.com/doc/2.0/bundles/SensioFrameworkExtraBundle/index.html
答案 1 :(得分:19)
Symfony2期望从控制器操作返回Response对象。我猜你可能想要以下内容:
return $this->render(
"YourBundlePath:Something:template.html.twig",
array(
'curso' => $curso,
'delete_form' => $deleteForm->createView(),
'detcurso' => $detcurso,
'formdetcurso' => $formdetcurso,
)
);
$this->render()
方法将呈现提供的模板名称,在上面的示例中,将模板传递给您的参数数组。它会将这个生成的内容包装在一个Response对象中,这正是Symfony2所期望的。
您也可以直接返回一个新的Response对象,例如return new Response('Hello, world')
,如果需要。
有关详细信息,请参阅the documentation。
答案 2 :(得分:5)
我也遇到了这个问题,这篇帖子离我的问题最近,但没有解决,所以我想在这里写一下我的解决方案,万一有些人也遇到了我的问题。
似乎模板注释存在问题,就像上面有人说的那样,你可以使用渲染函数来解决问题,但我认为这不是一个好的解决方案,因为@template注释试图让这个模板更容易管理默认情况下在symfony crud生成器中使用。
所以,我的问题是我安装了FosRestBundle,并且在安装它时我必须通过将这些行添加到config.yml来禁用模板注释:
#The view_annotations flag must be false to work with FOSRestBundle
sensio_framework_extra:
view:
annotations: false
您必须删除这些行以使@template注释再次起作用。这很奇怪,因为我在完成最后一个作曲家更新之后才遇到这个问题,但之前没有。
这是跟随捆绑安装文档而不了解你在做什么的问题^ _ ^!
希望这有助于某人
答案 3 :(得分:3)
更新您的配置文件
sensio_framework_extra:
view:
annotations: true
答案 4 :(得分:1)
正如Kox和Inori在评论中所说,返回$ this->渲染不是解决方案,而是简单地避免问题。
有两种可能性:
template
和Template
不一样。 bin vendors/update
吗?答案 5 :(得分:0)
我刚刚在部署后遇到了同样的问题并且必须清除我的缓存才能让symfony2注意我最近添加的@Template注释(从$ this-> render()切换)。在尝试此操作之前,请确保您已清除生产缓存。
从你的symfony目录: php app / console cache:clear --no-warmup --env = prod
答案 6 :(得分:0)
只需将以下内容添加到控制器顶部:
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;