我正在与Symfony 3和Twig合作。我从API中获取DNS信息。但是我永远不知道它将有多少行。因此,这是一个问题,可以说域www.example.com有3个DNS,当我请求获得表单时,我只从表单中恢复了最后的DNS。
树枝:
{% if dnsinfo is defined %}
<form class="form-inline" method="post" action="/setdns">
{% if dnsinfo is not empty %}
{% for dns in dnsinfo %}
<div class="row " >
<div class="input-group col-xs-3">
<input type="text" id="dns" name="dns" value="{{ dns.1 }}" class="form-control">
</div>
<div class="col-xs-2 input-group">
<select class="form-control" id="type" name="type" style="width:100%;">
<option value="notselected" selected disabled>* Select a type</option>
<option value="A"{% if dns.2 == 'A' %} selected{% endif %}>A</option>
<option value="AAAA"{% if dns.2 == 'AAAA' %} selected{% endif %}>AAAA</option>
<option value="CNAME"{% if dns.2 == 'CNAME' %} selected{% endif %}>CNAME</option>
<option value="MX"{% if dns.2 == 'MX' %} selected{% endif %}>MX</option>
<option value="SOA"{% if dns.2 == 'SOA' %} selected{% endif %}>SOA</option>
<option value="TXT"{% if dns.2 == 'TXT' %} selected{% endif %}>TXT</option>
<option value="SRV"{% if dns.2 == 'SRV' %} selected{% endif %}>SRV</option>
</select>
</div>
<div class="col-xs-3">
<input type="text" id="content" name="content" value="{{ dns.3 }}" class="form-control">
</div>
<div class="col-xs-1">
<input type="text" id="ttl" name="ttl" value="{{ dns.4 }}" class="form-control">
</div>
<div class="col-xs-3">
<input type="text" id="prio" name="prio" value="{{ dns.5 }}" class="form-control">
</div>
</div>
<hr class="divider" style="">
{% endfor %}
{% endif %}
<input type="submit" class="btn btn-success" value="Save">
<a href="/registereddomain" class="btn btn-secondary">Cancel</a>
</form>
{% endif %}
Symfony Controller:
$this->pre($request->request->get('dns'));
$API = $this->connect();
$dns = array(
'domain' => $request->request->get('domain'),
'extension' => $request->request->get('ext'),
'dnsdata' => serialize( array(
1 => array(
'name' => $request->request->get('dns'),
'type' => $request->request->get('type'),
'content' => $request->request->get('content'),
'ttl' => $request->request->get('ttl'),
'prio' => $request->request->get('prio')
)
))
);
$API->prepare('dns', $dns);
当然我知道解决方案。使用字段姓名1 name2等的数字,但是必须有更好的方法来执行此操作吗?我要获得的是打印我的请求:
[dns] => array(带有我以我的表格发送的所有DNS的数组)
这是表单数据中的内容https://gyazo.com/ebd558ba7f1ef8e1bfbe86e115bbb1e如您所见,它持有我需要使用$request->request->get()
的所有数据,我只能采用最后一个数据。所以我的问题是如何获取所有数据?
vardump和返回所有字段的表格
sollution :
我最终与数字合作,因此我知道从API发送了多少个字段。然后循环到所有字段
{% if dnsinfo is defined %}
{% set i=0 %}
<form class="form-inline" method="post" id="form" action="/setdns">
<input value="{{ domain }}" hidden name="domain" id="domain">
<input value="{{ ext }}" hidden name="ext" id="ext">
{% if dnsinfo is not empty %}
{% for dns in dnsinfo %}
<div class="row " >
<div class="input-group col-xs-3">
<input type="text" id="dns{{ i }}" name="dns{{ i }}" value="{{ dns.1 }}" class="form-control">
</div>
<div class="col-xs-2 input-group">
<select class="form-control" id="type{{ i }}" name="type{{ i }}" style="width:100%;">
<option value="notselected" selected disabled>* Select a type</option>
<option value="A"{% if dns.2 == 'A' %} selected{% endif %}>A</option>
<option value="AAAA"{% if dns.2 == 'AAAA' %} selected{% endif %}>AAAA</option>
<option value="CNAME"{% if dns.2 == 'CNAME' %} selected{% endif %}>CNAME</option>
<option value="MX"{% if dns.2 == 'MX' %} selected{% endif %}>MX</option>
<option value="SOA"{% if dns.2 == 'SOA' %} selected{% endif %}>SOA</option>
<option value="TXT"{% if dns.2 == 'TXT' %} selected{% endif %}>TXT</option>
<option value="SRV"{% if dns.2 == 'SRV' %} selected{% endif %}>SRV</option>
</select>
</div>
<div class="col-xs-3">
<input type="text" id="content{{ i }}" name="content{{ i }}" value="{{ dns.3 }}" class="form-control">
</div>
<div class="col-xs-1">
<input type="text" id="ttl{{ i }}" name="ttl{{ i }}" value="{{ dns.4 }}" class="form-control">
</div>
<div class="col-xs-3">
<input type="text" id="prio{{ i }}" name="prio{{ i }}" value="{{ dns.5 }}" class="form-control">
</div>
</div>
<hr class="divider" style="">
{% set i = i + 1 %}
{% endfor %}
{% endif %}
<input type="submit" class="btn btn-success" onclick="$('#form').attr('action','/setdns{{ i }}')" value="Save">
<a href="/registereddomain" class="btn btn-secondary">Cancel</a>
</form>
{% endif %}
如您在我的按钮中所看到的,我使用jQuery将电话号码发送到我的控制器
/**
* @Route("/setdns{i}", name="setdns", requirements={"i": "d+"})
*/
public function setdns(Request $request, $i = false) {
$API = new Whoisdomainmodify();
$API = $API->connect();
for ($x=0; $x < $i; $x++) {
$dns = array(
'domain' => $request->request->get('domain'),
'extension' => $request->request->get('ext'),
'dnsdata' => serialize(array(
1 => array(
'name' => $request->request->get('dns'.$x),
'type' => $request->request->get('type'.$x),
'content' => $request->request->get('content'.$x),
'ttl' => $request->request->get('ttl'.$x),
'prio' => $request->request->get('prio'.$x)
)
))
);
echo '<pre>';
print_r($dns);
$API->prepare('dns', $dns);
// $API->execute();
// $API->fetch();
}
$this->addFlash('Success', 'DNS successfully changed');
return $this->redirectToRoute('registereddomain');
}
如果有一种更好的方法来做到这一点,请告诉我。因为我发送了所有表格数据,请参见Gyazo。
您知道树枝中的for循环具有变量:
http://twig.sensiolabs.org/doc/tags/for.html#the-loop-variable
例如,您可以使用:
{{ dns.loop.index0 }}
或类似的东西。试试看。Twig非常强大,如果您熟悉它,它可能会为您节省很多编码。我不确定这是否是答案,但可能会帮助您。