所以我对 symfony(和一般的 MVC 框架)是全新的,所以我需要一个完整的初学者回答我的问题。
基本上,我已经设置了一个控制器来向当前页面的导航元素添加一个类。至少在理论上我有,在实践中我得到以下异常错误:
在“myNewBundle:Page:text-elements.html.twig”中呈现模板(“控制器必须返回响应(给定的文本元素)。”)期间引发了异常。
我认为问题(或至少部分问题)是控制器已与模板分离。所以它不知道它被调用的页面是否是当前的。
这是我的控制器的内容:
<?php
namespace my\NewBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
/**
* @Template("myNewBundle::definitions.html.twig")
*/
class NavController extends Controller
{
public function renderNavAction($target='/usage', $text='Insert Link')
{
$output = '<a href="' . $this->generateUrl($target) . '" ';
if ($this->getRequest()->get('_route') == $target) $output .= 'class="active"';
$output .= '>' . $text . '</a>';
return $output;
}
}
这是 twig 模板中应该渲染出来的部分:
<ul>
<li>{{ render(controller('myNewBundle:Nav:renderNav', { 'target': 'my_new_textElements', 'text' : 'Text elements' })) }}</li>
<li>{{ render(controller('myNewBundle:Nav:renderNav', { 'target': 'my_new_buttons', 'text': 'Buttons' })) }}</li>
<li>{{ render(controller('myNewBundle:Nav:renderNav', { 'target': 'my_new_forms', 'text': 'Forms' })) }}</li>
<li>{{ render(controller('myNewBundle:Nav:renderNav', { 'target': 'my_new_lists', 'text': 'Lists' })) }}</li>
<li>{{ render(controller('myNewBundle:Nav:renderNav', { 'target': 'my_new_tables', 'text': 'Tables' })) }}</li>
<li>{{ render(controller('myNewBundle:Nav:renderNav', { 'target': 'my_new_searchBoxes', 'text': 'Search Boxes' })) }}</li>
<li>{{ render(controller('myNewBundle:Nav:renderNav', { 'target': 'my_new_pods', 'text': 'Reusable Pods' })) }}</li>
</ul>
有人可以让我知道我做错了什么吗?注意:模板注释部分是我在尝试自己解决问题时添加的。如果没有必要,我很乐意删除/更改它。