当我看不到“ dump”调用的输出时,如何调试REST请求?

问题描述

我想调试发送到我的Controller方法的请求:

use FOS\RestBundle\Controller\Annotations as Rest;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class IteropController extends AbstractController
{

    /**
     * @Rest\Post("/api/getiterop",name="api_get_iterop")
     * @Rest\RequestParam(name="sary",nullable=true)
     */
    public function getIteropForm(Request $req)
    {
        $response = new Response();
        $response->headers->set('Access-Control-Allow-Origin','*');
        $response->headers->set('Content-Type','application/json');
        $response->setContent(json_encode(['prenom' => $req->request->get('prenom'),'sary' => $req->files->get('sary') ? 'misy' : 'tsisy']));
        dump($req->getContent());
        return $response;
    }
}

但是在运行时,我在浏览器开发工具的“网络”选项卡中得到了(Failed)net::ERR_Failed,并且CORS错误出现在浏览器的控制台日志中。

那么如何调试其余的POST?

解决方法

如果要调试PHP,通常最好的方法是安装并学习使用Xdebug(没有什么比真正的逐步调试器更胜一筹了。)

或者您安装Symfony Profiler(require profiler-pack)和symfony/debug-bundlerequire symfony/debug-bundle),这使您可以在Profiler输出中查看dump()调用的输出(您将在响应标头中查找X-Debug-Token-Link标头,其中包括指向分析器记录的链接,并且dump()的输出位于“调试”选项卡上。)


尽管如此,对于CORS问题,PHP调试器只会告诉您很多信息。 Symfony探查器可能会更有用,因为它可以告诉您有关请求的更多信息。但是,您真正需要做的是检查响应标头,以查看是否获得了所有期望的CORS标头。

此外,在某些情况下,浏览器将发送飞行前OPTIONS请求以验证CORS标头,如果您没有正确考虑这些标头,浏览器请求也可能会失败。或者,如果您在请求中使用凭据,则完全不允许使用*作为来源。因此,调试的第一步是检查这些请求和相应的响应头。