我在同一页面上再次显示数据时遇到了一些麻烦。我有一个简单的观点
{% 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;在...中不存在。
那么如何呈现从表单提交返回的数据呢?
由于
答案 0 :(得分:2)
这是因为Twig希望在第一次呈现页面时将data
传递给模板(由初始GET控制器处理)。要解决此问题,您需要检查以确定是否已定义data
。
我会做这样的事情:
{% if data is defined %}
{% for d in data %}
{{ d }}
{% endfor %}
{% endif %}
现在,当表单最初加载但是为空时,Twig首先检查变量是否传递给它,并且因为它没有,它只是完全跳过for循环。
另一种选择是简单地在第一个控制器中传递一个空数组。除非你坚持使用数据,否则我认为它不太理想,无论如何它都是实用的。