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

How do I debug a REST request when I can't see the output of "dump()" calls?

我想调试发送到我的控制器方法的请求:

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 错误。

那么如何调试 Rest POST?

如果你想调试 PHP,通常最好的办法是安装并学习使用 Xdebug(没有什么比真正的 step-by-step 调试器更好)了。

或者您安装 Symfony Profiler (require profiler-pack) 和 symfony/debug-bundle (require symfony/debug-bundle),这样您就可以在分析器中查看 dump() 调用的输出输出(您会在响应 header 中查找 X-Debug-Token-Link header,其中包括 link 到探查器记录,dump() 的输出是在“调试”选项卡上)。


然而,对于 CORS 问题,PHP 调试器只会告诉您这么多。 Symfony 分析器可能更有用,因为它可以告诉您有关请求的更多信息。但您真正需要做的是检查响应 headers 以查看是否获得了您期望的所有 CORS headers。

此外,在某些情况下,浏览器会发送 pre-flight OPTIONS 请求来验证 CORS headers,如果您没有正确考虑这些,浏览器请求可能会失败,因为出色地。或者,如果您在请求中使用凭据,则根本不允许使用 * 作为来源。所以调试的第一步是检查那些请求和相应的响应headers.