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 循环。
另一种选择是在您的第一个控制器中简单地传递一个空数组。我认为它不太令人满意,除非你要持久化数据,到那时它还是很实用的。
我再次在同一页面上显示数据时遇到一点问题。我有一个简单的看法
{% 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 循环。
另一种选择是在您的第一个控制器中简单地传递一个空数组。我认为它不太令人满意,除非你要持久化数据,到那时它还是很实用的。