我正在尝试在Symfony2中测试一个ajax
请求。 我编写了一个单元测试,在我的app/logs/test.log
中抛出以下错误:
request.CRITICAL: Uncaught PHP Exception Twig_Error_Runtime:
"Impossible to access an attribute ("0") on a string variable
("The CSRF token is invalid. Please try to resubmit the form.")
in .../vendor/twig/twig/lib/Twig/Template.php:388
我的代码非常直接明了。
public function testAjaxJsonResponse()
{
$form['post']['title'] = 'test title';
$form['post']['content'] = 'test content';
$form['post']['_token'] = $client->getContainer()->get('form.csrf_provider')->generateCsrfToken();
$client->request('POST', '/path/to/ajax/', $form, array(), array(
'HTTP_X-Requested-With' => 'XMLHttpRequest',
));
$response = $client->getResponse();
$this->assertSame(200, $client->getResponse()->getStatusCode());
$this->assertSame('application/json', $response->headers->get('Content-Type'));
}
问题似乎是
CSRF
令牌,我可以在测试中禁用它,但我并不想这样做。我通过进行两个请求来解决问题(第一个请求加载带有表单的页面,我们获取 _token
并使用 XMLHttpRequest
进行第二个请求)。这显然看起来相当愚蠢和低效!
security.csrf.token_manager
而不是form.csrf_provider
。 - COil