2017-06-22 206 views
0

私は一日中角度からphpにデータを投稿しようとしていましたが、私はかなり固執しています。 これは角コントローラからの私の方法です:phpへの角度ポストメソッド

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

それがデータを送信する必要があるとき、それはこの時点までうまくいけ:

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

それは私の$ http.post方法があるUniversalServiceに行きます私DatabaseController.php中のphp(私のWeb APIサービスは、ルーメンのフレームワークである)

私はJSONオブジェクト(私は失敗するところだ期待するので、私はかなり初心者です)

を受け取ることを期待しますroutes.phpの

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

で210

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で私はheader( 'Access-Control-Allow-Origin:*')を有効にしました。私はそれを(そして、どのように)角度のある側で行わなければならないかわからない。 http://localhost:8000/creationは私がで呼び出す別の関数からJSONオブジェクトと時間の場合はnullを取得postmanをする:

私が取得することは、私はそこに付加的な機能を持っていると私は入力したとき、エラーenter image description here

しかし、郵便配達の束が動作しているようです

+1

あなたは 'get' URLに' post'ingしています – aynber

+0

routes.phpで 'get'を' post'に変更しましたが、まだ問題があります:( – user122222

+0

エラーを表示するjsとルートの両方に投稿があります。 – aynber

答えて

1

は、他の三つのプログラマで、今日私の問題を解決しました。 @jheimbouchは言ったように、AngularはOPTIONSメソッドをPHPサービスに送るという問題がありました。もう一つの問題はcorsだった。当社のソリューションでした:/bootstrap/app.phpで 我々は追加: $app->middleware(['Cors' => App\Http\Middleware\CorsMiddleware::class]);

を、すべての私の問題を解決/ HTTP /ミドルウェア追加したファイルCorsMiddleware.phpに:

<?php 

名前空間のApp \のHttp \ミドルウェア。

閉鎖; イルミネーション\ 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のクロームでの飛行前のリクエストに遭遇したと思います。コンソールでは、POST自体ではなく、 "OPTIONS"要求について不平を言っていることに注意してください。サーバーコードを見ることなく、これを処理する方法の例と、OPTIONSのプレフライトのために応答する必要があるヘッダーをここに示します。

// 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

関連する問題