Laravel 5.2 API Rest和Angular JS - $ HTTP_RAW_POST_DATA已弃用

时间:2016-04-19 17:15:19

标签: angularjs rest laravel-5.2

我正在尝试将$ http.post AJAX数据发送到Laravel 5.2中配置的路由,一切正常,但服务器返回此错误:

  

不推荐使用:不推荐自动填充$ HTTP_RAW_POST_DATA   并将在以后的版本中删除。要避免此警告设置   在php.ini中'always_populate_raw_post_data'为'-1'并使用   php://改为输入流。在第0行的未知中

     

警告:无法修改标头信息 - 已发送的标头   第0行未知

这是我的代码。 PHP:

main()

JS:

public function save(Request $request){
      $input = $request->all();
      try {
        $direccion = urlencode($input['Calle']." ".$input['Numero'].", ".$input['Ciudad']);

        $geocode = "https://maps.googleapis.com/maps/api/geocode/json?address=$direccion&key=APIKEY";
        $datosGoogle = json_decode($this->curl($geocode), true);

        $latitud = $datosGoogle['results'][0]['geometry']['location']['lat'];
        $longitud = $datosGoogle['results'][0]['geometry']['location']['lng'];

        if(is_double($latitud) && is_double($latitud)){
          $input['Latitud'] = $latitud;
          $input['Longitud'] = $longitud;
          $new = MyModel::create($input);
          $data = ["status"=>"ok", "message"=>"Agregado correctamente"];
        }else{
          $data = ["status"=>"fail", "message"=>"Dirección desconocida, compruebe que los datos son correctos para que podamos agregarla al sistema."];
        }
      } catch (Exception $e) {
        $data = ["status"=>"error", "message"=>$e->getMessage()];
      }
      return response()->JSON($data);
    }

我该如何解决?

4 个答案:

答案 0 :(得分:2)

我在Laravel 5.2和Angular上遇到了同样的问题,我通过在控制器中添加一行来实现它:

editorApp.controller('EditorCtrl', function ($scope, $sce, $http, $location, $interval, $document){

    $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";

    ...

我在这篇文章中发现这对我有用:https://stackoverflow.com/a/19254137/4021927。标记为正确的答案对我不起作用,上面的一行来自同一篇文章中的另一个答案。正确答案(https://stackoverflow.com/a/20276775/4021927)会告诉您为什么需要它。

简而言之,为什么存在这个问题是因为Angular(默认情况下)使用JSON序列化发送数据:Content-Type: application/json并且PHP本身不会反序列化JSON。通过将内容类型更改为x-www-form-urlencoded,数据将按以下方式发送:

foo=bar&bar=foo

代替(JSON):

{ "foo": "bar", "bar": "foo" }

答案 1 :(得分:0)

我在Laravel 5.2中检索$ GLOBALS ['HTTP_RAW_POST_DATA']时遇到了类似的问题。我在控制器中使用Request::getContent()解决了这个问题

答案 2 :(得分:0)

在php.ini

中关闭error_reporting后我的工作正常
  1. 打开php.ini
  2. 搜索error_reporting
  3. 将其更改为=> error_reporting = E_ALL& ~E_DEPRECATED& 〜E_STRICT
  4. 退出并启动/重启apache服务器
  5. 重新启动laravel服务器

答案 3 :(得分:0)

laravel 5.2

/resource/assets/js/bootstrap.js



window.axios = require('axios');
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = window.Laravel.csrfToken;
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
//add default Content-Type 
window.axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';




2 data mast be string



const qs = require('qs')
axios.post('/api/code/create', qs.stringify(this.formItem),)
    .then(function (response) {
        console.log(response)
    })
    .catch(function (error) {
        console.log(error)
    })