5

我有一个 symfony 网站,我正在尝试做一些单元测试。我有这种测试,我尝试提交一些东西:

<?php

namespace Acme\AcmeBundle\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class HomeControllerTest extends WebTestCase {

    public function testrandomeThings() {

        $client = static::createClient();
        $crawler = $client->request(
            'POST',
            '/',
            array(
                "shopNumber"        => 0099,
                "cardNumber"        => 231,
                "cardPIN"           => "adasd"),
            array(),
            array());
        }

但我不认为控制器正在接收我发送的数据:

class HomeController extends Controller
{
    public function indexAction()
    {

        var_dump($_POST);
        die;
        return $this->render('AcmeBundle:Home:index.html.twig');
    }

}

var_dump实际上是给我一个空数组。

通过我的 POST 请求发送信息时我缺少什么?

4

2 回答 2

8

$_POST是一个由 PHP 填充的变量,如果直接通过 http 调用,symfony 请求只会从这个全局变量创建。symfony 爬虫不会发出真正的请求,它会根据您提供的参数创建请求$client->request并执行它。您需要通过Request对象访问这些东西。切勿直接使用$_POST,$_GET等。

use Symfony\Component\HttpFoundation\Request;

class HomeController extends CoralBaseController
{
    public function indexAction(Request $request)
    {

        var_dump($request->request->all());
        die;
        return $this->render('CoralWalletBundle:Home:index.html.twig');
    }

}

用于$request->request->all()获取数组中的所有 POST 参数。要仅获取特定参数,您可以使用$request->request->get('my_param'). 如果您需要访问 GET 参数,您可以使用$request->query->get('my_param'),但最好在路由模式中设置查询参数。

于 2013-09-19T17:22:46.780 回答
3

我认为您正在尝试这样做:

$client = static::createClient();
    $client->request($method, $url, [], [], [], json_encode($content));
    $this->assertEquals(
        200,
        $client->getResponse()
            ->getStatusCode()
    );

您将数据(内容)作为参数数组放入,但您希望将其作为原始正文内容放入,这是一个 JSON 编码的字符串。

于 2017-06-03T22:18:53.467 回答