通过 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()
方法处理客户端错误。
我目前正在开发一个 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()
方法处理客户端错误。