PHP Slim框架CORS

时间:2017-07-08 15:50:36

标签: php angular cors slim

我对这个CORS事情有点麻烦。 Angular 4在localhost:4200上运行,而Slimframework在localhost:8080上运行。

我的前端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,添加到我的设置数组中。

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

XMLHttpRequest无法加载http://lvh.me/api/partner。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:4200”访问。

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

编辑:

忘记了后端URI的8080端口,现在我添加了新错误:

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

2 个答案:

答案 0 :(得分:1)

通过将Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-Headers添加到Slim框架middlware,通过Skype解决。

答案 1 :(得分: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