通过AJAX将表单数据作为参数传递给Symfony2控制器函数


Pass form data as parameter to Symfony2 controller function via AJAX

我认为这是一个更复杂的技巧,因此我决定寻求StackOverflow上知识渊博的人的帮助。我的场景如下:我有两个实体,一个用户和一个帐户。用户在注册时总是链接到一个帐户(根据用户类型的不同,可能链接到多个帐户。注册后调用函数saveUser()(通过前端的ajax),并从请求对象中检索提交的表单数据。然后,这些数据以参数的形式传递给函数saveAccount($data)(在saveUser()函数中调用),然后创建帐户(有时使用不同的数据集多次调用以创建各种帐户),该帐户链接到用户。

现在我想在不创建用户的情况下从管理面板创建一个帐户,所以我想通过ajax(从前端)直接调用saveAccount($data),并将表单数据作为PARAMETER传递给它(而不是通过请求对象在函数中检索它),这样我就可以使用相同的saveAccount($data)函数,而且我不必创建一个saveAccount()来处理Request变量。这有道理吗?这可能吗?如果是的话,我该怎么做呢?

我没有发布任何代码,因为我认为没有必要,这更多的是一个概念问题,但如果你需要我迄今为止拥有的代码,或者如果有什么不清楚的地方,我很乐意详细说明。

不应该有任何saveAccount方法,您只需要依赖实体之间的关系,即setAccount方法,或者addAccount方法,以防您需要将实体添加到Collection

然后,教义会照顾到拯救和坚持一切。

为了保存数据,我总是依赖RESTful接口[您可以通过FOSRestBundle轻松创建],并通过ajax发送所有内容;您最终会得到一个更平滑的界面和更可维护的代码。

对于可以通过带有表单数据的AJAX或由另一个控制器函数内部调用控制器函数的实例,以下解决方案有效:

public function saveAccount($data = null)
{
    if (empty($data)) $data = $this->getRequest()->request->all();
    ...
}

然后,您可以以与表单数据数组相同的格式将数组传递给控制器函数,如果传递给该函数,它将使用该数据,否则它将检索REQUEST(表单)数据。