Sonata Admin - 自定义AJAX调用

时间:2013-10-21 11:03:51

标签: symfony symfony-forms sonata-admin symfony-2.3

我在sonata admin创建了一个自定义列表视图,以显示日历。

我正在尝试动态地向日历添加事件,但是我收到错误,CSRF令牌无效。

我有以下代码:

public function listAction()
{
    if (false === $this->admin->isGranted('LIST')) {
        throw new AccessDeniedException();
    }

    $datagrid = $this->admin->getDatagrid();
    $formView = $datagrid->getForm()->createView();

    // set the theme for the current Admin Form
    $this->get('twig')->getExtension('form')->renderer->setTheme($formView, $this->admin->getFilterTheme());

    $em = $this->getDoctrine()->getManager();
    $events = $em->getRepository('BMCrmBundle:Event')->findAll();

    $event = new Event();

    $formEvent = $this->createForm(new EventType(), $event );

    return $this->render($this->admin->getTemplate('list'), array(
        'action'     => 'list',
        'form'       => $formView,
        'datagrid'   => $datagrid,
        'csrf_token' => $this->getCsrfToken('sonata.batch'),
        'events'     => $events,
        'formEvent'  => $formEvent->createView()
    ));
}

视图

var url = "{{ path('create_event', { _sonata_admin: 'bm.crm.admin.event'} ) }}";
$.post(url, form.serialize(), function(data) {
   alert(data);
});

这始终返回CSRF令牌无效

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

检查您的视图中是否有以下行:

{{ form_rest(form) }}

因为我相信您一个接一个地渲染表单字段而不是整个表单,而忘记呈现包含CSRF令牌的表单的其余部分。