我做了一个适度的发布功能,但是我不确定我的方法是否安全。
这是控制者
Error in split_indices(.group, .n) : std::bad_alloc
目前没有安全控制。
我在树枝中的链接具有一些属性: 一个id,因为每个帖子都必须有自己的适度按钮, 数据href,用于获取js文件中的路径。 click事件也有一个normalLink类。
/**
* @param Request $request
* @Route ("/forum/moderate/post", name="post_moderate")
* @return Response
*/
public function moderateAction(Request $request, PostRepository $postRepository)
{
$reason = htmlentities($request->request->get('reason'));
$postId = (int)htmlentities($request->request->get('postId'));
if (empty($reason)) {
return new Response(json_encode('fail'), 500);
}
$em = $this->getDoctrine()->getManager();
$post = $postRepository->findOneBy(array('id' => $postId));
$post->setModerateReason($reason);
$em->persist($post);
$em->flush();
return new Response(json_encode('ok'), 200);
}
这是我的post.js文件:
<a class="btn btn-danger btn-squared btn-sm mr-2 text-white moderateLink"
title="Modérer le commentaire" id="moderateLink-{{ post.id }}"
data-href=" {{ path('post_moderate') }}"><i class="fas fa-gavel"></i></a>
最大的问题是,任何用户都不能编辑HTML文件来放置所需的属性和类名称。我不希望他们访问弹出框。
我尝试过类似的操作:
嫩枝:
$(function () {
$('.moderateLink').on('click', moderate);
});
function moderate () {
let id = $(this).attr('id');
id = id.split('-');
id = id[1];
var reason = prompt('Entrez la raison: ');
var url = $(this).attr('data-href')
if (reason != null && reason.trim() != '') {
$.ajax({
type: "POST",
url: url,
crossDomain: false,
data: 'reason=' + reason + '&postId=' + id,
dataType: 'json',
async: false,
success: function (res) {
if (res == 'ok') {
//
}
}
});
} else if (reason != null) {
alert('Vous devez entrer une raison.');
return;
}
}
带有FOSjsRoutingBundle(https://symfony.com/doc/master/bundles/FOSJsRoutingBundle/index.html)的Post.js:
<a class="btn btn-danger btn-squared btn-sm mr-2 text-white"
title="Modérer le commentaire"
onclick="moderate({{post.id}})"><i class="fas fa-gavel"></i></a>
但是在这种情况下,控制台告诉我,“中度”未定义。 如果我在顶部删除导入,则该函数有效,但无法将路径传递给js。
我不知道如何实现目标,我想使用第二种方法,但是我不知道如何...