2017-08-02 182 views
1

我正在开发一个应用程序,前端带有AngularJS,后端带有PHP。XDebug不会在http请求后的断点处停止

他们与REST沟通。

前端实现浏览器同步以刷新更新。

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

在我们开始使用BroswerSync之前,PHP代码会在请求发送到服务器之后暂停一个断点,现在它不工作......我们使用其他工具(如Postman和PhpStorm中的内部REST客户端,而代码确实设法暂停,但不是来自Angular本身。

回答

1

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

我就开GET在新标签要求(通过右键单击Chrome开发网络选项卡中的请求),断点可以工作,但不会发出POST请求。

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

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

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

$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"); 
} 

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