在http请求之后,XDebug不会在断点处停止

时间:2017-08-02 18:15:37

标签: php angularjs curl xdebug

我正在使用前端的AngularJS和后端的PHP开发应用程序。

他们与REST沟通。

前端实现browsersync以刷新更新。

我在PhpStorm中使用XDEBUG调试PHP代码。

在我们开始使用BroswerSync之前,PHP代码会在请求发送到服务器后暂停在断点上,现在它不起作用...我们使用Postman和内部REST客户端等其他工具进行了测试PhpStorm,代码确实设法暂停,但不是来自Angular本身。

1 个答案:

答案 0 :(得分:1)

我试图找到一种方法来轻松重复HTTP请求,这样我就可以多次调试而不会一次又一次地填充相同的数据(如表单)......

我会在新标签页中打开GET请求(通过右键点击Chrome开发者网络标签中的请求),断点可以正常工作,但不会发布POST请求。

不知何故,在Stack Overflow的帮助下,我发现将Chrome Dev中的请求复制为CURL并添加--cookie "XDEBUG_SESSION=PHPSTORM"会触发XDebug。

通常,要从Chrome触发XDebug,您需要安装" XDebug Helper"。这让我得出结论,其中一个是" XDebug Helper"函数是添加一个将触发XDebug的cookie。

此问题的解决方案是向Angular HTTP请求添加withCredentials: true。 所以它看起来像:

$http.get(path, {withCredentials: true});

var options = { 
                headers: {'Content-Type': 'application/x-www-form-urlencoded'},
                withCredentials: true
              }

$http.post(path, params, options);

此外,还需要更新服务器端的响应标头:

header("Access-Control-Allow-Origin: http://localhost:3000");
header("Access-Control-Allow-Credentials: true");

请注意,您需要根据发送请求的位置设置原点。这也增加了一层安全性,因为在此之前我们只使用*并接受来自任何地方的请求。

为了更轻松地配置多个主机:

$http_origin = $_SERVER['HTTP_ORIGIN'];

//The static method returns an array of hosts
if (in_array($http_origin, Config::getAllowedOrigins()))
{
    header("Access-Control-Allow-Origin: $http_origin");
    header("Access-Control-Allow-Credentials: true");
}

希望这个解释会有所帮助!