Symfony2 - 在同一页面上显示数据

Symfony2 - Display data on same page

我再次在同一页面上显示数据时遇到一点问题。我有一个简单的看法

{% block main %}
    <div class="col-md-4">

        <section class="panel panel-default">
            <div class="panel-body">
                <form action="{{ path('NickAlertBundle_tsubmit') }}" method="post" enctype="multipart/form-data" class="terminalForm" id="terminalForm">
                    <div class="row">
                        <div class="col-md-12">
                            <input type="text" class="addMargin" id="terminal_command" name="terminal_command" placeholder=">">
                        </div>
                    </div>

                    <div class="row">
                        <div class="col-md-8 col-md-offset-4">
                            <input type="submit" class="btn btn-default" id="terminal_submit" value="Submit">
                        </div>
                    </div>
                </form>
            </div>
        </section>

    </div>

    <div class="col-md-8" id="terminal-window">

    </div>
{% endblock %}

所以在那个视图上我显示了一个表单。用户输入一些数据,然后我希望在终端中显示响应-window div。所以我设置了路线

NickAlertBundle_terminal:
    pattern:  /terminal
    defaults: { _controller: NickAlertBundle:Alert:terminal }
    methods:  [GET]

NickAlertBundle_tsubmit:
    pattern:  /terminal
    defaults: { _controller: NickAlertBundle:Alert:tcreate }
    methods:  [POST]

GET 只是呈现初始页面,POST 控制器正在做

public function terminalAction()
{
    return $this->render('NickAlertBundle:Page:terminal.html.twig');
}

public function tcreateAction(Request $request)
{
    try {
        $terminal_command = strtoupper($request->get('terminal_command'));

        $uapiService = $this->container->get('alert_bundle.api_service');
        $commandData = $uapiService->terminalService($terminal_command);

        return $this->render('NickAlertBundle:Page:terminal.html.twig', array(
            'data' => $commandData,
        ));

    }catch (Exception $e) {
    }
}

这是正确的做法吗?我问的原因是因为如果我将以下内容添加到视图

中的 div
{% for d in data %}
    {{ d }}
{% endfor %}

我显然得到以下错误

Variable "data" does not exist in...

那么如何呈现从表单提交返回的数据?

谢谢

这是因为 Twig 希望 data 在第一次呈现页面时传递给模板(由初始 GET 控制器处理)。要解决此问题,您需要检查以确定是否已定义 data

我会这样做:

{% if data is defined %}
    {% for d in data %}
        {{ d }}
    {% endfor %}
{% endif %}

现在,当表单最初加载但为空时,Twig 首先检查变量是否已传递给它,如果没有,它就完全跳过 for 循环。

另一种选择是在您的第一个控制器中简单地传递一个空数组。我认为它不太令人满意,除非你要持久化数据,到那时它还是很实用的。