通过 JavaScript 使用 Symfony2 将数据插入数据库,无需表单

Insert data into DB with Symfony2 via JavaScript, without a form

我目前正在开发一个 Symfony2 项目,用户可以在其中通过 contenteditable 跨度对网页的某些部分发表评论。我现在想将这些组装在 JSON 对象数组中的评论保存到数据库中,并引用页面和用户 ID。这就是我卡住的地方。

将JavaScript代码中的数据放入具体的DB中需要什么步骤table?

我已经在 Entity 文件夹中创建了评论 class。并基于 this 回答 我在 saveComment() in JavaScript:

中添加了以下代码
$.post('saveComments.php', {
    page_id : getPageId(),
    user_id : getUserId(),
    comments : getJSONcomments(),
});

下一步...?

好的,让我们创建一个 saveComments.php ...但是在包中的什么位置?或者这可以用控制器来完成吗?如果是这样,我需要如何以及用什么替换 $.post(...) 调用中的 url ("saveComments.php")?

不要 post 到 PHP 页面,因为这会破坏 Symfony 2 模型。相反 post 到一条路线,例如 save/comment 或沿着这些路线。

将路由配置为指向控制器中的操作。

实现控制器和动作,使其不带任何参数。在操作中解压 posted 数据,通常使用 PHP 方式使用(因为您没有将数据绑定到的表单):

$_POST

为了让它正常工作,echo 一个 var_dump() 到控制台,看看你得到了什么。这是一个关于如何 write to the console.

的例子

serializer解码JSON数据。

解码后的数据将是一个简单的关联 PHP 数组。解释您收到的数据并采取相应的行动(不要忘记处理安全和所有其他事情 - 您不想通过 AJAX 打开安全漏洞)。

最好的是,您检查您选择的路由是否属于您需要的安全层,并且可能已经在 Symfony 2 应用程序中进行了配置。这样您就不需要在操作中手动处理安全问题了。

完成后 return 一个 HTTP response,代码为 200 OK

return new Response('', Response::HTTP_OK); // no response text at all

如果有任何错误回复 500 class HTTP 服务器错误:

return new Response('', Response::HTTP_INTERNAL_SERVER_ERROR); // 500

此外,不要忘记使用 .error() 方法处理客户端错误。