1

したがって、私はsymfony(およびMVCフレームワーク全般)にまったく慣れていないので、私の質問に対する完全な初心者の回答が必要です.

基本的に、現在のページのナビゲーション要素にクラスを追加するコントローラーをセットアップしました。少なくとも理論的には、実際には次の例外エラーが発生します。

"myNewBundle:Page:text-elements.html.twig"で、テンプレートのレンダリング中に例外がスローされました ("The controller must return a response ( Text elements given)")。

問題 (または少なくともその一部) は、コントローラーがテンプレートから切り離されていることだと思います。そのため、呼び出されているページが現在のページであるかどうかはわかりません。

これが私のコントローラーの内容です:

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

誰かが私が間違っていることを教えてもらえますか? 注: テンプレートの注釈部分は、自分で問題を解決しようとしたときに追加したものです。必要がない場合は、喜んで削除/変更します。

4

1 に答える 1

2

symfony book のコントローラーの章を注意深く読んでください。コントローラーは常に 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;
}

しかし、あなたの状況では、マクロを作成するか、単純に別のテンプレートをパラメーターに含める方がよいでしょう。

于 2013-08-22T08:54:04.180 に答える