2017-07-08 99 views
0

我对这个CORS的东西有点麻烦。在localhost:4200上运行Angular 4,而Slimframework在localhost:8080上运行。PHP Slimframework CORS

我的前端HTTP请求:

.... 
createPartner(partner: Partner): Observable<Partner> { 
    let headers = new Headers({ 'Content-Type' : 'application/json'}); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post(this.regUrl, partner, options) 
      .map((res: Response) => { 
       return res.json(); 
      }) 
      .catch(this.handleError); 
    } 
.... 

我的中间件:

.... 
$app->add(function($request, $response, $next) { 
$route = $request->getAttribute("route"); 

$methods = []; 

if (!empty($route)) { 
    $pattern = $route->getPattern(); 

    foreach ($this->router->getRoutes() as $route) { 
     if ($pattern === $route->getPattern()) { 
      $methods = array_merge_recursive($methods, $route->getMethods()); 
     } 
    } 
} else { 
    $methods[] = $request->getMethod(); 
} 

$response = $next($request, $response); 


return $response->withHeader("Access-Control-Allow-Methods", implode(",", $methods)); 
}); 

我添加"determineRouteBeforeAppMiddleware" => true,我的设定数组。

浏览器的(铬)控制台说:

的XMLHttpRequest无法加载http://lvh.me/api/partner。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。因此不允许访问原产地'http://localhost:4200'。

我做错了什么,伙计们? :/

编辑:

忘记后端URI的8080端口,现在我补充说,新的错误是:

OPTIONS http://lvh.me:8080/api/partner net::ERR_CONNECTION_REFUSED 
+0

我的php有点生疏,但我想你必须添加''Access-Control-Allow-Origin:*')',不知道如何用你的框架做到这一点,也许通过'$ response-> withHeader ' – pregmatch

+0

是的,我正在用' - > withHeader('Access-Control-Allow-Origin','*');'但没有任何反应。 – Hienz

+0

你可以转储你从中间件获得的所有头文件吗?一些复制/粘贴。也许你的头被重写了一些你看不到的东西。发生在我身上的很多次。 – pregmatch

回答

1

通过添加通过Skype分辨,Access-Control-Allow-MethodsAccess-Control-Allow-Headers以Slim框架中间件。

0

以下添加到您的htaccess允许CORS,

<IfModule mod_rewrite.c> 

  Header add Access-Control-Allow-Origin "*" 

  Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT" 

  Header add Access-Control-Allow-Headers: "Content-Type" 


  RewriteEngine on 

  RewriteBase/

</IfModule> 

来源:https://gist.github.com/maxparm/3105526

+0

我也尝试过这些简单的解决方案,但没有奏效。 – Hienz

+1

这个答案只适用于他使用Apache的情况。 –

+0

我的.htaccess:'RewriteEngine On RewriteCond%{REQUEST_FILENAME}!-f RewriteRule^index。PHP [QSA,L] 头添加访问控制允许来源 “*” 头添加接入控制允许的方法:“GET,POST,OPTIONS,DELETE PUT” 头添加访问控制允许信头:‘内容类型’ ' 和IM仍然得到错误。 – Hienz