我做得更简单了(对于我在底部留下的复杂问题道歉)。
我希望有一个树枝模板渲染另一个控制器作为子部分。
这是父树枝(Resources / views / Default / testRenderParent.html.twig):
<p>Look! I am your father!</p>
<p>But look, I am not your
{{ render(controller("SarelTestBundle:Default:testRenderChild")) }}</p>
这是儿童树枝(Resources / views / Default / testRenderChild.html.twig):
KID
控制器(Controller / DefaultController.php):
<?php
namespace Sarel\Test\TestBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
/**
* @Template()
**/
class DefaultController extends Controller
{
/**
* @Route("/testRenderParent")
*/
public function testRenderParentAction()
{
return array();
}
/**
* @Route("/testRenderChild")
*/
public function testRenderChildAction() {
return array();
}
}
当您运行此命令时,使用以下URL / testRenderChild,您应该回显“KID”。 当你使用URL / testRenderParent(注意“Parent”部分)运行它时,你应该得到回应:
看!我是你父亲! 但是,看,我是你的KID
然而,相反,你会得到回应,以及它下面的错误:
看!我是你父亲! 但是,看,我不是你的 看!我是你父亲! 但是,看,我不是你的 看!我是你父亲! 但是,看,我不是你的 看!我是你父亲! 但是,看,我不是你的 看!我是你父亲! 但是,看,我不是你的 看!我是你父亲! 但是,看,我不是你的 看!我是你父亲! 但是,看,我不是你的 看!我是你父亲! 但是,看,我不是你的 FatalErrorException:错误:达到'250'的最大函数嵌套级别,正在中止!在/Users/sarel/www/playpen/app/cache/dev/classes.php第6134行
因此你可以看到,它正在呈现“看!我是你的父亲!但是看,我是你的......”然后不再使用它的枝条模板渲染子控制器,而是重新渲染父级,结束于一个无限循环,被例外逮捕。
---在我改变之前复制---
---在我改变之前复制---
---在我改变之前复制---
所以我试图使用enter link description here中的指南在我的symfony2项目中嵌入一个控制器(最终是动作呈现的模板)。
我的控制器定义如下:
<?php
namespace OTS\CoreBundle\Controller;
/**
* @Template()
*/
class EmergencyContactsController extends Controller
{
public function addEmergencyContactAction(Request $request, $id) {
return array();
}
}
我附加了一个twig模板,现在只有一个名为addEmergencyContact.html.twig的twig文件形式的“hello world”。
当我转到这个的URL时,就像localhost / my_route_to_it一样,它工作得很好,我在屏幕上看到“hello world”。
现在,根据this,我只需将以下twig命令放入:
{{ render(controller('OTSCoreBundle:EmergencyContacts:addEmergencyContact', {'id': 15})) }}
当我执行此操作并加载保持路径时,它似乎正在尝试加载主路径,然后在我渲染子路径的位置内再次加载主路径。我知道这是因为它告诉我缺少变量 - 我只在主枝文件中使用的变量。
然而,当我:
答案 0 :(得分:2)
嗯。这个问题有点令人困惑,但是:
一个。与所有控制器操作一样,addEmergencyContact需要返回响应,而不是数组。所以:
class EmergencyContactsController extends Controller
{
public function addEmergencyContactAction(Request $request, $id)
{
$tplData = array();
$tplData['id'] = $id;
return $this->render('CoreBundle::emergency_contact.html.twig', $tplData);
}
}
B中。您需要两个模板文件。类似的东西:
class HelloWorldController extends Controller
{
public function helloWorldAction(Request $request, $id)
{
$tplData = array();
$tplData['id'] = $id;
return $this->render('CoreBundle::hello_world.html.twig', $tplData);
}
}
℃。然后渲染线进入hello_world.html.twig文件。
{{ render(controller('OTSCoreBundle:EmergencyContacts:addEmergencyContact', {'id': 15})) }}
d。请注意,您的emergency_contact模板只能访问紧急联系操作传递给它的值。它不会“继承”hello_world的值。
那为什么我的代码格式搞砸了呢?不喜欢编号列表。
答案 1 :(得分:2)
这证明是注释工作方式的一个错误。当我将控制器从全局@Template()更改为将旧学校单独移回每个动作时,它可以正常工作。这是更新后的控制器,查看@Template()现在所在的位置:
<?php
namespace Sarel\Test\TestBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
class DefaultController extends Controller
{
/**
* @Route("/testRenderParent")
* @Template()
*/
public function testRenderParentAction()
{
return array();
}
/**
* @Route("/testRenderChild")
* @Template()
*/
public function testRenderChildAction() {
return array();
}
}