在每个控制器请求之前执行功能

Executing function before every controller request

我正在使用 php-openstack-sdk 的令牌身份验证调用云 APIs。

$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();
}

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

我认为最好的方法是使用laravel middlewares

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

Controller.php

class Controller extends BaseController
{
    protected $openstack;

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

网络Controller.php

class NetworkController extends Controller
{
    public function getNetworkDetails() {
        $network = $this->openstack->networking();
    }
}