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


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

我目前正在做一个Symfony2项目,用户可以通过contentitable span对网页的部分内容进行评论。现在,我想将这些在JSON对象数组中组装的注释保存到数据库中,并附带对页面和用户id的引用。这就是我被卡住的地方。

需要哪些步骤将JavaScript代码中的数据放入特定的DB表中?

我已经在Entity文件夹中创建了一个Comment类。基于此我在JavaScript的saveComment()中添加了以下代码:

$.post('saveComments.php', {
    page_id : getPageId(),
    user_id : getUserId(),
    comments : getJSONcomments(),
});

下一步……?

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

不要发布到PHP页面,因为这会破坏Symfony 2模型。而是发送到路由,如save/comment或沿着这些线路。

配置路由指向控制器中的一个动作。

实现控制器和动作,使其不接受任何参数。在action中,使用通常的PHP方式解包发布的数据(因为您没有绑定数据的表单):

$_POST

只是为了让它工作,echovar_dump()到控制台,看看你得到什么。这是一个关于如何写入控制台的示例。

使用序列化器解码JSON数据

解码后的数据将是一个简单的关联PHP数组。解释接收到的数据并采取相应的行动(也不要忘记处理安全性和所有这些东西——您不希望通过AJAX打开安全漏洞)。

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

一旦完成,返回代码为200 OK的HTTP响应。

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

如果有任何错误,用500类回复HTTP服务器错误:

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

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