Symfony请求仅返回一个请求




我正在与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非常强大,如果您熟悉它,它可能会为您节省很多编码。我不确定这是否是答案,但可能会帮助您。

最新更新