问题描述
我想调试发送到我的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-bundle
(require symfony/debug-bundle
),这使您可以在Profiler输出中查看dump()
调用的输出(您将在响应标头中查找X-Debug-Token-Link
标头,其中包括指向分析器记录的链接,并且dump()
的输出位于“调试”选项卡上。)
尽管如此,对于CORS问题,PHP调试器只会告诉您很多信息。 Symfony探查器可能会更有用,因为它可以告诉您有关请求的更多信息。但是,您真正需要做的是检查响应标头,以查看是否获得了所有期望的CORS标头。
此外,在某些情况下,浏览器将发送飞行前OPTIONS
请求以验证CORS标头,如果您没有正确考虑这些标头,浏览器请求也可能会失败。或者,如果您在请求中使用凭据,则完全不允许使用*
作为来源。因此,调试的第一步是检查这些请求和相应的响应头。