【问题标题】:Pass form data as parameter to Symfony2 controller function via AJAX通过 AJAX 将表单数据作为参数传递给 Symfony2 控制器函数
【发布时间】:2013-12-13 14:55:42
【问题描述】:

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

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

我没有发布任何代码,因为我没有看到需要它,这更多是一个概念问题,但是如果您需要我目前拥有的代码或者如果有任何不清楚的地方,我会很乐意详细说明。

【问题讨论】:

    标签: php jquery ajax symfony


    【解决方案1】:

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

    然后 Doctrine 将负责保存和持久化所有内容。

    为了保存数据,我会始终依赖 RESTful 接口 [您可以通过 FOSRestBundle 轻松创建该接口],无论如何都通过 ajax 发送所有内容;您最终会得到更流畅的界面和更易于维护的代码。

    【讨论】:

    • 好吧,我承认我还不是 Symfony 专家,但你的解释并不完全有道理。我的架构是这样的,用户是实体,帐户是实体,它们以多对多关系链接。因此,在创建用户期间,我确实使用了$user->addAccount($account);(有时不止一次,因为用户可以链接到多个帐户),但据我所知,您必须先创建该帐户实体($account)才能链接它,所以我使用 $account = saveAccount($data)。
    • 您应该在控制器中创建帐户 - 实体不应该负责创建其他实体。当您刷新entityManager 时,所有内容都会正确保存。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2016-02-09
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多