【问题标题】:Fetch form_params data from Guzzle post request in lumen api从 lumen api 中的 Guzzle 发布请求中获取 form_params 数据
【发布时间】:2019-04-14 09:29:56
【问题描述】:

在我的 laravel 5.7 应用程序中,我有一个具有以下方法的控制器,它使用 GuzzleHttp\Client 将发布请求发送到我的 lumen api。

public function insert(Request $request)
    { 
        $domain = Config::get('url.gcr_api'); // gcr_api is defined in app/config/url.php
        $url = $domain . "/api/v1/campaign/insert"; 

        $campaign_name =  $request->input('campaign_name');
        $campaign_provider =  $request->input('campaign_provider');

        $client = new Client;
        $response = $client->request('POST', $url , [
                                'headers' => [
                                    'X-XSRF-TOKEN' => csrf_token(),
                                ],
                                'form_params' => [
                                    'name' => $campaign_name, 
                                    'bank_id' => $campaign_provider,
                                ]
                            ]
                    );

        $data = json_decode($response->getBody(), true);
        return $data;

    }
}

这是上面方法调用的lumen api的代码。

public function insert(Request $request) {
        try {
            $campaign_name =  $request->input('campaign_name');
            $campaign_provider =  $request->input('campaign_provider');

            $data = array('name' => $campaign_name, 'bank_id' => $campaign_provider);
            DB::table('campaign')->insert($data); 

            $response = array(
                'status' => 'success',
                'message' => 'Campaign created successfully',
            );        
            return response()->json($response);
        }
        catch(Exception $e) {
            // When query fails. 
            $response = array(
                'status' => 'failed',
                'message' => 'Failed to create campaign',
            );

            return response()->json($response);
        }
    }

每次调用我的 laravel 应用控制器的插入方法时,我都会收到此错误:

GuzzleHttp \ Exception \ ServerException (500) 服务器错误:POST http://localhost:8000/api/v1/campaign/insert 导致500 Internal Server Error 响应:

我认为错误与我的 lumen api 无法获取 form_params 数据有关,所以我在我的 lumen api 代码中注释掉了这段代码并且错误消失了:

/*$campaign_name =  $request->input('campaign_name');
  $campaign_provider =  $request->input('campaign_provider');

  $data = array('name' => $campaign_name, 'bank_id' => $campaign_provider);
  DB::table('campaign')->insert($data); */

但是我需要在我的 lumen api 中获取 form_params 数据,我该怎么做?

【问题讨论】:

    标签: laravel lumen guzzle


    【解决方案1】:

    您的假设部分正确,它可以访问form_params,但您尝试获取的form_params与实际参数不同:

    为了传递参数,您使用以下数组:

    'form_params' => [
        'name' => $campaign_name, 
        'bank_id' => $campaign_provider,
    ]
    

    这个数组会将值设置为$campaign_name,键为'name',$campaign_provider 设置为bank_id。到目前为止,这段代码没有任何问题。

    但是在您的 API 中,您可以执行以下操作:

    $campaign_name =  $request->input('campaign_name');
    $campaign_provider =  $request->input('campaign_provider');
    

    但是没有键 campaign_namecampaign_provider 存在,因为它们已更改为 namebank_id。因此,如果您将其更改为以下内容,它应该可以工作:

    $campaign_name =  $request->input('name');
    $campaign_provider =  $request->input('bank_id');
    

    【讨论】:

    • 使用 $client = new Client() , $response = $client->request() 与使用 this->client->request() 有什么不同?
    • $client 是一个局部变量,不是一个类变量,所以它不能从$this 访问,首先你必须在使用它之前实例化它;)
    • 会有同样的结果吗?当我应该写一些东西时我总是很困惑this->
    • 不,它肯定不会有相同的结果,你应该使用哪个完全取决于你的类和函数,如果 $client 是一个已经实例化的类变量(使用this),或者如果您自己在函数中创建客户端(客户端不作为类变量存在,即您不能使用this),请查看oreilly.com/library/view/web-database-applications/0596005431/… 或其他面向对象的编程文章以获得更多上下文; )
    猜你喜欢
    • 2015-09-16
    • 2020-06-27
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多