在Symfony 2中修改请求对象

时间:2016-02-10 08:07:08

标签: ajax symfony

我的控制器上有以下代码:

/**
 *
 * @Route("/{discountLevelItemId}/manage-product/update", name="discountlevel_manage_product_update", defaults={"_format"="json"} )
 * @Method("POST")
 */
public function manageProductUpdateAction($discountLevelItemId, Request $request)
{
    $em = $this->getDoctrine()->getEntityManager();
    $entity = $em->getRepository('CIInventoryBundle:DiscountLevelItem')->find($discountLevelItemId);
    $form = $this->createForm(new DiscountLevelItemCollectionType(), $entity);
    $form->bindRequest($request);

    if ($form->isValid()) {
        //remove items without discount type
        foreach ($entity->getDiscountLevelItemProducts() as $item) {
            if (!$item->getDiscountType()) {
                $entity->getDiscountLevelItemProducts()->removeElement($item);
                $em->remove($item);
            }
        }

        $em->persist($entity);
        $em->flush();

        $responseData = array(
            'status' => 'success',
            'message' => 'Supplier product discounts successfully saved.'
        );
    } else {
        $responseData = array(
            'status' => 'error',
            'form' => $this->renderView('CIInventoryBundle:DiscountLevel:manageProducts.html.twig', array(
                'entity' => $entity,
                'form' => $form->createView()
            ))
        );
    }
    return new Response(json_encode($responseData), 200, array('Content-Type'=>'application/json'));
}

此操作通过ajax调用。在调用此控制器之前,我过滤掉了一些数据:

initForm: function() {
            //submit form function
            var options = {
                delegation: true,
                dataType: "json",
                beforeSubmit: function(arr, $form, options) {

                    //holds objects every four looping
                    var tempArray = new Array();
                    //holds changed objects that will only be submitted in the server.
                    var changedArray = new Array();
                    var found = false;
                    var idx = 1;

                    //get the token then remove from arr.
                    changedArray.push(arr.splice(arr.length-1,1)[0]);

                    for (var j = arr.length-1; j >= 0; j--) {
                        var obj = arr[j];

                        if ( viewCtrl.dliProductsChanged.indexOf(obj.value) != -1 ) {
                            found = true;
                        }

                        tempArray.push(arr[j]);

                        if(idx % 4 == 0) {
                            if (found == true) {
                                for(var i = 0; i < tempArray.length; i++){
                                    changedArray.push(tempArray[i]);
                                }

                                found = false;
                            }
                            tempArray.length = 0;
                        }

                        idx++;
                    }

                    arr.length = 0;

                    for(var i = 0; i < changedArray.length; i++){
                        arr.push(changedArray[i]);
                    }

                    viewCtrl.dliProductsChanged.length = 0;

                    $form.find( ".submit-button" ).button( "loading" );
                    $form.find( ".discount-value, .trucking" ).addClass( "uneditable-input" );
                    $form.find( ".discount-type" ).attr( "readonly", true );
                },
                success: function(responseText, statusText, xhr, $form) {
                    if ( responseText.status == "success" ) {
                        viewCtrl.modal.modal( "hide" );
                        $.growl.notice({ title: "<strong>Saved</strong>", message: responseText.message, size: "large", duration: 5000, location: "br" });
                        viewCtrl.dliProductsChanged.length = 0;
                    } else {
                        viewCtrl.modal.find( ".modal-content" ).html( responseText.form );
                    }

                    $form.find( ".submit-button" ).button( "reset" );
                }
            };

            $( "#manage-products-form" ).ajaxForm( options );
        },

我的问题是,当表单无效时,如何使用我过滤掉的数据重新填充表单?我想到的第一件事就是修改请求对象,然后重新绑定它,但我不知道如何实现...

任何见解?

PS:我在表单提交时使用JQUERY Form Plugin。

谢谢!

0 个答案:

没有答案