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

时间:2015-03-10 13:56:58

标签: symfony twig

我在同一页面上再次显示数据时遇到了一些麻烦。我有一个简单的观点

{% 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 %}

所以在那个视图中我会显示一个表单。用户输入一些数据,然后我希望在终端窗口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 %}

我明显得到以下错误

  

变量&#34;数据&#34;在...中不存在。

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

由于

1 个答案:

答案 0 :(得分:2)

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

我会做这样的事情:

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

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

另一种选择是简单地在第一个控制器中传递一个空数组。除非你坚持使用数据,否则我认为它不太理想,无论如何它都是实用的。