Symfony2,如何从控制器加载数据来填写表单?

时间:2014-05-27 17:44:06

标签: javascript php symfony

我不确定这是否完全可行,但我正在模仿从平面PHP构建的程序到Symfony2的函数。我坚持这个功能。

1)首先,有一行输入字段是动态填充的。

<label for="noofracks"># of racks</label>
        <input type="text" name="noofitems" id="numberform">
<div id="">
<form name="dataform" method="post" action="" id="dataform">
            <input type="hidden" name="lastdasearch">
            <div id="racks">
                <div class="rack" id="rack1">
                    <span id="itemno1"><a href="javascript:void(0)" onclick="open('{{ path('log_searchsub'}}', 'popupwindow', 'width = 600, height = 600, scrollbars = 1'); return false;">Search</a>
    </span>
                    <input type="hidden" id="subid" name="subid1" value="" placeholder="subid" disabled><br/>
                    <input type="text" id="dano" name="dano1" value="" placeholder="dano" disabled><br/>
                    <input type="text" id="partno" name="partno1" value="" placeholder="partno" disabled><br/>
                    <input type="text" id="rackno" name="rackno1" value="" placeholder="rackno" disabled><br/>
                    <input type="text" id="diecode" name="diecode1" value="" placeholder="diecode" disabled><br/>
                    <input type="text" id="heatcode" name="heatcode1" value="" placeholder="heatcode" disabled><br/>
                    <hr />
                </div>
            </div>
            <input type="date" name="shipdate"><br/>
            <input type="number" name="qtyshipped" placeholder="Qty Out"><br/>
            <input type="text" name="blno" placeholder="BL #"><br/>
            <button type="submit" name="submit">Submit</button>
        </form>

2)<div id="racks">下的输入字段将根据用户插入<input id="numberform"..的数字填充。所以下一个填充的输入行将增加数字name =“dano2”,dano3 ......等

3)将从弹出窗口中插入值,该窗口列出数据库中的数据以及链接<a href="javascript:void(0)" onclick="open('{{ path('log_searchsub', {'return' : noofitems}) }}', 'popupwindow', 'width = 600, height = 600, scrollbars = 1'); return false;">Search</a>的来源。它将打开一个包含数据库中列表的弹出窗口:

<table class="tablesorter">
            <thead>
                <th>DA</th>
                <th>Part</th>
                <th>Batch</th>
                <th>Rack</th>
                <th>Die Code</th>
                <th>Heat Code</th>
                <th>Qty</th>
                <th></th>
            </thead>
            {% for entity in entities %}
            <tr>
                <td>{{ entity.dano }}</td>
                <td>{{ entity.partno }}</td>
                <td>{{ entity.batchno }}</td>
                <td>{{ entity.rackno }}</td>
                <td>{{ entity.diecode }}</td>
                <td>{{ entity.heatcode }}</td>
                <td>{{ entity.inqty }}</td>
                <td><a href="{{ path('log_loaddata', {'subid' : entity.subid}) }}">Select</a></td>
            </tr>
            {% endfor %}
        </table>

4)我有“选择”链接转到从Doctrine中选择该行数据的控制器,我希望它将它加载到目标右输入数字的输入字段中(进入dano1,partno1,rackno1 .. )。我只是......不知道如何去做。

/**
 * @Route("/searchsub/{subid}", name="log_loaddata")
 * @Method("GET")
 */
public function loadDataAction($subid) {
    $em = $this->getDoctrine()->getRepository('Main');
    $entity = $em->allBySub($subid);

    //get the exact entity that the user selected and load the data into the target input fields. 
    //close the popup window

}

如果有人知道更好的方法,那也会很棒!

编辑:我想要的行为和行动是:

在每个附加的<div class="rack" id="rack1">的内容上,有一个搜索链接,它将为弹出窗口提供一个列出数据行的表(行列出'dano','partno','batchno的数据'即将插入输入字段)。每行数据旁边都有一个“选择”链接,我想抓取那一行数据,并填充到父页面输入字段。我想让它确定要进入哪个<div class="rack" id="rack..(我还没有弄清楚那个部分)。

1 个答案:

答案 0 :(得分:0)

基于我到目前为止所理解的,您要做的是创建一个单击函数,该函数将从表行获取信息并使用这些值创建输入字段。所以这将是纯粹的JS。

首先,您需要稍微更改HTML以使其工作。

对于您要填充的每个输入字段,您应该替换id字段以使其成为data-name,因为HTML id无法复制,并且我们将有多个字段这些(又称多个“机架”)

此:

<input type="text" id="dano" name="dano1"  ... />

应该是:

<input type="text" data-name="dano" name="dano1" ... />

其他输入也一样。

在弹出窗口的HTML中,您需要将相同的data-name="[inputName]"添加到<td>元素,以便识别它们。

例如:

<td data-name="dano">{{ entity.dano }}</td>

最后,我们可以在select链接中添加一个类来将click事件附加到它:

<a class"select-link" data-id="{{ entity.subid }}"  ... >Select</a>

现在,一旦您点击链接,您基本上需要做的就是获取填充所需的信息。所以像:

var parentWindow = window.opener; // get the original window to push info to

$('.select-link').on('click', function(e) {
    var cells = $(this).parent().siblings(); // Get all TD elements in the same row
    var subid = $('this').data('id');

    cells.each(function(i, element){
        var name = $(element).data('name');

        var newRack = parentWindow.$('#rack1').clone() // Clone the row

        // insert data into new rack
        newRack.attr('id', 'rack' + subid);
        $('input[data-name=' + name + ']', newRack)
            .val($(element).text())
            .attr('name', name + subid);
    });

    // Append new rack to the main window
    parentWindow.$('#racks').append(newRack);


});

当然,这只是一个概念。它将需要一些调整和谷歌搜索。希望它有所帮助。