Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JavaScript使用Symfony2将数据插入数据库,无需表单_Javascript_Php_Database_Symfony - Fatal编程技术网

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

通过JavaScript使用Symfony2将数据插入数据库,无需表单,javascript,php,database,symfony,Javascript,Php,Database,Symfony,我目前正在从事一个Symfony2项目,用户可以通过contenty对网页的某些部分进行评论。现在我想将这些注释保存到数据库中,这些注释组合在一个JSON对象数组中,并引用页面和用户id 将JavaScript代码中的数据放入特定的DB表需要哪些步骤? 我已经在实体文件夹中创建了一个注释类。基于 答:我在JavaScript中的saveComment()中添加了以下代码: $.post('saveComments.php', { page_id : getPageId(), us

我目前正在从事一个Symfony2项目,用户可以通过contenty对网页的某些部分进行评论。现在我想将这些注释保存到数据库中,这些注释组合在一个JSON对象数组中,并引用页面和用户id

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

我已经在实体文件夹中创建了一个注释类。基于 答:我在JavaScript中的saveComment()中添加了以下代码:

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


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

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

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

执行控制器和操作,使其不接受任何参数。在操作中,使用通常的PHP方式解压发布的数据(因为您没有表单将数据绑定到):

为了让它正常工作,
echo
a
var\u dump()
到控制台,看看能得到什么。这是一个关于如何使用的示例

使用

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

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

完成此操作后,返回一个代码
200 OK

return new Response('', Response::HTTP_OK); // no response text at all
如果有任何错误,请回复500类HTTP服务器错误:


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

感谢您的快速回答!我需要更多的帮助来获得正确的路由,因为根本没有来自echo的输出和来自控制器中操作的var_dump()。在控制器中,我使用
@Route(“/saveComment”,name=“saveComment”)
创建了函数
saveComment()
。在JavaScript$.post(…)中,url现在是“/saveComment”。很有趣,没有错误。有什么建议我应该做不同的吗?我已经编辑了答案指向另一个在这里,所以它是解释如何做。您不能在JSON响应中使用
var\u dump()
,因为没有要呈现的HTML输出。当您返回新的响应(…)时,您将失去任何输出。但这正是您希望响应工作的方式。此外,如果您使用Chrome或Firefox,请按F12并打开网络选项卡。然后按
F5
并单击您需要的任何内容以查看AJAX响应被触发。在inspector中,您将看到可能是Symfony 2异常转储的回复。路由正确-刚刚在网络选项卡中发现了输出。这很有帮助,谢谢!有一个新的数据库条目-耶!非常感谢您详细而清晰的回答。
return new Response('', Response::HTTP_OK); // no response text at all
return new Response('', Response::HTTP_INTERNAL_SERVER_ERROR); // 500