在树枝和symfony中使用onclick调用js函数

时间:2019-03-13 14:49:38

标签: javascript symfony twig

我做了一个适度的发布功能,但是我不确定我的方法是否安全。

这是控制者

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。

我不知道如何实现目标,我想使用第二种方法,但是我不知道如何...

0 个答案:

没有答案