2017-06-22 57 views
0

我一直试图从角度发布数据到php整天,但我感觉相当卡住。 这是角度控制我的方法:角度post方法到php

function submit() {  
     var JSONObject = { 
      "name":$rootScope.name, 
      "surname":$rootScope.surname, 
      "email":$rootScope.email, 
      "review":$rootScope.review 
     }; 
     debugger; 
     var Results = UniversalService.PostReview(JSONObject); 
    } 

然后它去UniversalService在我的$ http.post方法是:

function PostReview(JSONObject) { 
     debugger; 
     $http.post('http://localhost:8000/creation', JSONObject).then(); 
     debugger; 
    } 

一切顺利,直到当它发送数据到这一点PHP(我的网页API服务是流明框架)

在我DatabaseController.php我希望收到我的JSON对象

(我很初学者,所以我希望这就是我失败)

public function created(Request $request) 
{ 
    $inputJSON = file_get_contents('php://input'); 
    $input= json_decode($inputJSON, TRUE); //convert JSON into array 

    print_r(json_encode($input)); 
    /* $user=[ 
     'name'=>$request->input('name'), 
     'surname'=>$request->input('surname'), 
     'email'=>$request->input('email'), 
     'review'=>$request->input('review'), 
    ]; 
    $time=$this->getTime();*/ 
// return DatabaseModel::newUser($user); 

} 

在routes.php文件

$app->post('/creation', [ 'as'=>'creation','uses'=> '[email protected]']); 

我用GET和POST这里走出的绝望,我似乎无法得到它的权利都没有。也在routes.php我启用标题('访问控制,允许来源:*');而且我不确定我是否需要在角度上做到这一点(以及如何)。

什么,我得到的是一堆错误enter image description here

但邮递员似乎工作,我有附加功能还有,当我进入:http://localhost:8000/creation到邮递员,我得到空从我在调用另一个函数的JSON对象和时间创建()

+1

你'后'到'获取'URL – aynber

+0

我改变'get'到'后'routes.php,仍然有问题:( – user122222

+0

显示你的错误js和路线都有帖子。 – aynber

回答

1

解决我的问题今天与其他三个编程人员。正如@jheimbouch所说,问题在于Angular向PHP服务发送OPTIONS方法。所陈述的另一个问题是cors。我们的解决方案是:在 我们/bootstrap/app.php补充​​说: $app->middleware(['Cors' => App\Http\Middleware\CorsMiddleware::class]);

然后在/ HTTP /中间件添加文件CorsMiddleware.php这解决了我的所有问题:

<?php 

命名空间应用\ HTTP \中间件;

使用关闭; 使用Illuminate \ Http \ Response;

类CorsMiddleware {

protected $settings = [ 
      'origin' => '*', // Wide Open! 
      'allowMethods' => 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS']; 

protected function setOrigin($req, $rsp) 
{ 
    $origin = $this->settings['origin']; 
    if (is_callable($origin)) 
    { 
     // Call origin callback with request origin 
     $origin = call_user_func($origin, $req->header("Origin")); 
    } 
    $rsp->header('Access-Control-Allow-Origin', $origin); 
} 

protected function setExposeHeaders($req, $rsp) 
{ 
    if (isset($this->settings->exposeHeaders)) 
    { 
     $exposeHeaders = $this->settings->exposeHeaders; 

     if (is_array($exposeHeaders)) 
     $exposeHeaders = implode(", ", $exposeHeaders); 

     $rsp->header('Access-Control-Expose-Headers', $exposeHeaders); 
    } 
} 

protected function setMaxAge($req, $rsp) 
{ 
    if (isset($this->settings['maxAge'])) 
    $rsp->header('Access-Control-Max-Age', $this->settings['maxAge']); 
} 

protected function setAllowCredentials($req, $rsp) 
{ 
    if (isset($this->settings['allowCredentials']) && $this->settings['allowCredentials'] === True) 
    $rsp->header('Access-Control-Allow-Credentials', 'true'); 
} 

protected function setAllowMethods($req, $rsp) 
{ 
    if (isset($this->settings['allowMethods'])) 
    { 
     $allowMethods = $this->settings['allowMethods']; 

     if (is_array($allowMethods)) 
     $allowMethods = implode(", ", $allowMethods); 

     $rsp->header('Access-Control-Allow-Methods', $allowMethods); 
    } 
} 

protected function setAllowHeaders($req, $rsp) 
{ 
    if (isset($this->settings['allowHeaders'])) 
    { 
     $allowHeaders = $this->settings['allowHeaders']; 

     if (is_array($allowHeaders)) 
     $allowHeaders = implode(", ", $allowHeaders); 

    } 
    else // Otherwise, use request headers 
    { 
     $allowHeaders = $req->header("Access-Control-Request-Headers"); 
    } 

    if (isset($allowHeaders)) 
    $rsp->header('Access-Control-Allow-Headers', $allowHeaders); 

} 

protected function setCorsHeaders($req, $rsp) 
{ 
    // http://www.html5rocks.com/static/images/cors_server_flowchart.png 
    // Pre-flight 
    if ($req->isMethod('OPTIONS')) 
    { 
     $this->setOrigin($req, $rsp); 
     $this->setMaxAge($req, $rsp); 
     $this->setAllowCredentials($req, $rsp); 
     $this->setAllowMethods($req, $rsp); 
     $this->setAllowHeaders($req, $rsp); 
    } 
    else 
    { 
     $this->setOrigin($req, $rsp); 
     $this->setExposeHeaders($req, $rsp); 
     $this->setAllowCredentials($req, $rsp); 
    } 
} 

/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) { 

    if ($request->isMethod('OPTIONS')) { 
     $response = new Response("", 200); 
    } 
    else { 
     $response = $next($request); 
    } 

    $this->setCorsHeaders($request, $response); 

    return $response; 
}} 

希望这会帮助别人,因为我花了年龄把它全部完成!无论如何,非常感谢大家谁帮助:)

+0

很高兴你有它工作! – jheimbouch

1

我相信你会受到OPTIONS预镀铬前的要求。在控制台中注意它抱怨你的“OPTIONS”请求,而不是POST本身。在没有看到您的服务器代码的情况下,下面是一个如何处理它的例子,以及需要在您的OPTIONS pre-flight的响应中使用的标题。

// respond to preflights 
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 
    // return only the headers and not the content 
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']){ 
    header('Access-Control-Allow-Origin: *'); 
    header('Access-Control-Allow-Headers: X-Requested-With'); 
    } 
    exit; 
} 

更详尽的解释,(凡我抓起段)可以在这里找到:https://remysharp.com/2011/04/21/getting-cors-working