1

我正在使用带有php-openstack-sdk 的令牌身份验证来调用云 API 。

$openstack = new OpenStack\OpenStack([
    'authUrl' => '{authUrl}',
    'region' => '{region}',
    'user' => [
        'id' => '{userId}',
        'password' => '{password}'
    ],
    'scope' => ['project' => ['id' => '{projectId}']]
]);

但是,每个 API 调用都需要我进行身份验证(如上面的代码所示)。而不是在每个控制器功能中重复相同的身份验证代码,我该如何做一次并能够调用$openstack我的控制器的功能?即,在我的控制器中,我可以直接使用$openstack。

public function listServers() 
{
    $openstack->computeV2()->listServers();
}
4

3 回答 3

3

如果您希望所有控制器都可以访问,请在__construct()您的逻辑中编写逻辑。如果没有,请在您需要的控制器Controller.php中编写。__construct()

控制器.php

class Controller extends BaseController
{
    protected $openstack;

    public function __construct()
    {
        $this->openstack = new OpenStack\OpenStack([
            ...
        ]);
    }
}

网络控制器.php

class NetworkController extends Controller
{
    public function getNetworkDetails() {
        $network = $this->openstack->networking();
    }
}
于 2019-04-25T05:40:57.290 回答
0

我认为最好的方法是使用laravel 中间件

于 2019-04-25T02:59:02.023 回答
0

您可以将显示的代码放置在__construct控制器的函数中,并将其作为受保护的变量提供给类。

于 2019-04-25T02:01:57.753 回答