将返回数据传递到同一控制器laravel中的另一个函数

时间:2019-07-19 19:13:37

标签: laravel guzzle

尝试连接到外部API。 在第一个功能中,我已经收到带有身份验证的令牌。 要发送POST请求,我需要将从第一个函数收到的xtoken放在第二个函数中。 我不知道如何向第二个函数(registerUser)发送值

Route::get('/connect', 'Guzzlecontroller@registerUser')->name('registeruser');

这是我的路线文件

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
use App\Http\Controllers\Auth\RegisterController;

class GuzzleController extends Controller
{
    public function Gettoken()
    {
        $client = new \GuzzleHttp\Client();
        $request = $client->get(
            'http://api01.oriental-game.com:8085/token',
            [
                'headers' => [
                    'X-Operator' => 'mog189b',
                    'X-key' => 'sQxAVNaEMe0TCHhU',

                ]
            ]

        );
        $response = $request->getBody();
        $tokenReturn = json_decode($response, true);
        $xtoken = array("x-token:" . $tokenReturn['data']['token'],);

        $this->registerUser($xtoken);
    }

    public function registerUser($xtoken)
    {

        $client = new \GuzzleHttp\Client();
        $url = "http://api01.oriental-game.com:8085/register";

        $request = $client->post($url,  [
            'headers' => $xtoken,
            'body' => [
                'username' => 'test1',
                'country' => 'Korea',
                'fullname' => 'test user1',
                'language' => 'kr',
                'email' => 'testuser1@test.com',

            ]
        ]);
        $response = $request->send();

        dd($response);
    }
}

函数App \ Http \ Controllers \ GuzzleController :: registerUser()的参数太少,已传递0个且恰好期望1个

这是我得到的错误。 请帮助我如何将$ xtoken值发送到registerUser函数

1 个答案:

答案 0 :(得分:0)

问题是Laravel直接调用registerUser而不是通过getToken进行调用。因此,令牌永远不会被检索并传递给register操作。

而不是从registerUser()调用Gettoken()。让Gettoken()返回令牌并从registerUser()

调用它
public function Gettoken()
{
    ...

    return $xtoken;
}

public function registerUser()
{
    $xtoken = $this->Gettoken();

    ...
}