我有一个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());
}
但我不认为Im发送的数据是在控制器中收到的:
class HomeController extends Controller
{
public function indexAction()
{
var_dump($_POST);
die;
return $this->render('AcmeBundle:Home:index.html.twig');
}
}
var_dump
实际上是给我一个空数组。
通过我的POST请求发送信息我缺少什么?
答案 0 :(得分:7)
$_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')
,但更好地设置路由模式中已有的查询参数。
答案 1 :(得分:2)
我认为你正在尝试这样做:
$client = static::createClient();
$client->request($method, $url, [], [], [], json_encode($content));
$this->assertEquals(
200,
$client->getResponse()
->getStatusCode()
);
您将数据(内容)作为params数组放入,但是您希望将其作为JSON编码字符串的原始内容放入。