Symfony2 - 正确地做事

时间:2015-02-15 22:24:42

标签: php ajax symfony

在制定最好的做事方法时遇到一些麻烦。我有一个普通的表单,这个表单已经有一个动作和一个data-url

<form action="{{ path('NickAlertBundle_create') }}" data-url="{{ path('NickAlertBundle_view') }}" method="post" enctype="multipart/form-data">

提交表单后,会转到javascript文件,ajax会处理它

$.ajax({
    type: "POST",
    url: $("#addAlertForm").attr("action"),
    data: data,
    success: function(data) {
        if(data){
            var splitdata = data.split(":");
            if(splitdata[0]=="Success"){
                var id = splitdata[1];
                alert("Your alert has been added");
                document.location.href= $("#addAlertForm").attr('data-url');
            }else{
                alert(data);
            }
        }else{
            alert("Unknown Error!");
        }
    },
    error:function(){
        alert("Error! Please try again");
    }
});

所以它基本上将一些数据发布到我的表单操作路径。如果它返回消息Success,它会将用户重定向到我的data-url路由。

所以一切正常。在我的createAction中,我将数据插入数据库,如果成功,我将返回Success。然后,用户将重定向到view-alerts(viewAction)页面以查看数据。

public function createAction(Request $request)
{
    try {
        //Get data

        $em = $this->getDoctrine()->getManager();

        $alert = new AvailabilityAlert();
        $alert->setSearchCommand($na_command);
        $alert->setLastUpdated();
        $em->persist($alert);

        $em->flush();

        return new JsonResponse('Success');

    }catch (Exception $e) {
    }

}

public function viewAction()
{
    $repository = $this
    ->getDoctrine()
    ->getManager()
    ->getRepository('NickAlertBundle:AvailabilityAlert');

    $alerts = $repository->getAllActiveAlerts();

    return $this->render('NickAlertBundle:Page:view.html.twig', array(
        'alerts' => $alerts,
    ));
}

所以这一切都很有效,但现在出了问题。如果createAction成功,我现在需要加载其他东西,包括将警报传递给新类,这样我就可以用它做一些Web服务(没有任何内容显示给用户,一切都在后台完成)

为了做到这一点,我基本上是新的,在我的创建动作

的末尾添加如下内容
include 'cron_single.php';
addFlightsAction($alert);

这样做似乎是错误的。所以我在考虑为此创建一个单独的操作,我认为这是正确的方法。所以在上面的ajax中,如果响应是Success(我在哪里进行重定向),我可能会调用另一条路由。要做到这一点,我必须给我的表格类似于另一个数据网址,以便我可以获得路线,并且在我的表格中有这么多这些似乎是不正确的。

我想到的另一件事是直接在createAction的末尾做一些事情,比如调用路线。不知道这是否可能?

处理这样的事情最好的办法是什么?

由于

0 个答案:

没有答案