繁体   English   中英

Symfony2将控制器附加到树枝模板

[英]Symfony2 Attach controller to twig template

因此,我是symfony(和MVC框架)的新手,所以我需要一个完整的初学者回答我的问题。

基本上,我已经设置了一个控制器,将一个类添加到当前页面的导航元素中。 至少在理论上,我在实践中遇到以下异常错误:

呈现模板期间,在“ myNewBundle:Page:text-elements.html.twig”中引发了异常(“控制器必须返回响应(给定Text元素 )。”)。

我认为问题(或至少是问题的一部分)是控制器已与模板分离。 因此,不知道正在调用该页面的页面是否为当前页面。

这是我的控制器的内容:

<?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;
    }
}   

这是树枝模板的一部分,应将其呈现出来:

<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>

有人可以让我知道我做错了什么吗? 注意:模板注释部分是我自己尝试解决问题时添加的。 如果没有必要,那么我很乐意删除/更改它。

认真阅读symfony书中的Controller章节。 控制器始终必须返回一个Response对象。

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>';
    $response->setContent($output);
    $response->setStatusCode(200);
    $response->headers->set('Content-Type', 'text/html');
    return $response;
}

但是,根据您的情况,最好制作一个或只包含另一个带有参数的模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM