【问题标题】:Send POST from Ionic 3 to Laravel PHP从 Ionic 3 向 Laravel PHP 发送 POST
【发布时间】:2018-07-31 12:32:32
【问题描述】:

我的控制器没有从 POST 请求返回请求正文。我正在尝试在 Ionic 中进行登录,该登录将指向我的 laravel 服务器。

Laravel : 控制器

public function store(Request $request){
     return $request->all();
}

离子 : register.ts (src: http://www.nikola-breznjak.com/blog/javascript/ionic3/posting-data-ionic-3-app-php-server/)

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Http } from '@angular/http'; //https://stackoverflow.com/questions/43609853/angular-4-and-ionic-3-no-provider-for-http

@Component({
 selector: 'page-register',
 templateUrl: 'register.html'
})

export class RegisterPage {
 data:any = {};

 constructor(public navCtrl: NavController, public http: Http) {
 this.data.username = '';
 this.data.response = '';

 this.http = http;
 }

 submit() {
 var link = 'http://127.0.0.1:777/api/user';
 var myData = JSON.stringify({username: this.data.username});

 this.http.post(link, myData)
 .subscribe(data => {
 this.data.response = data["_body"]; //https://stackoverflow.com/questions/39574305/property-body-does-not-exist-on-type-response
 }, error => {
 console.log("Oooops!");
 });
 }
}

所以我对其进行了调查,发现有效负载是这样的 JSON:

但是当我尝试使用 json_decode() 时,Laravel 验证将不起作用。

【问题讨论】:

  • 对我来说它看起来像是一个有效的 json...你确定你在 laravel 端正确处理了请求吗?
  • @MikeTung 是的,看看我的控制器,我只返回$request->all();

标签: php angular laravel ionic-framework


【解决方案1】:

我找到了答案!

而不是使用 laravel 的默认身份验证器。

public function store(Request $request)
{
    // return $request->all();

    $payload = json_decode(request()->getContent(), true);

    $this->validator($payload);

}

 protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'username' => 'required|string|username|max:50|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);
    }

所以我寻找一种方法来验证 JSON 对象而不是请求正文,我找到了这个方法:Laravel: validate json object

因此我将我的代码更新为:

public function store(Request $request)
    {
        // return $request->all();

        $payload = json_decode(request()->getContent(), true);
        $data = $payload;

        $rules = [
                'username' => 'min:5'
            ];

            $validator = Validator::make($payload, $rules);
            if ($validator->passes()) {
                return 'success';
            } else {
                //TODO Handle your error
                return $validator->errors()->all();
            }
}

【讨论】:

    【解决方案2】:

    你必须使用新的 FormData() 方法

    import 'rxjs/add/operator/map'; //FOR MAP DATA INTO JSON OR TEXT
    import 'rxjs/add/operator/timeout';  //FOR TIMEOUT
    import { Http,Headers,RequestOptions} from '@angular/http';  
    
    passdata(){
      this.headers = new Headers({ 'Content-Type': 'application/json' });  
      let body = new FormData();
      body.append("paramsmane","paramsvalue") 
      console.info(body);   
      return new Promise((resolve, reject) => {   
      return this.http.post('url', body,  this.headers)
      .timeout(40000)
      .map(response => response.json()).subscribe(res => { 
        console.info(res);
      },(reject) => {
        console.info('error',reject);
      })
    })
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-21
      • 2018-09-01
      • 2018-06-22
      • 2018-11-04
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 2018-09-11
      相关资源
      最近更新 更多