Выполнение функции перед каждым запросом контроллера - PullRequest
0 голосов
/ 25 апреля 2019

Я вызываю облачные API с помощью токеновой аутентификации с php-openstack-sdk .

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

Ответы [ 3 ]

1 голос
/ 25 апреля 2019

Запишите логику в __construct() вашего Controller.php, если вы хотите, чтобы это было доступно для всех контроллеров.Если нет, напишите __construct() в нужном контроллере.

Controller.php

class Controller extends BaseController
{
    protected $openstack;

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

NetworkController.php

class NetworkController extends Controller
{
    public function getNetworkDetails() {
        $network = $this->openstack->networking();
    }
}
0 голосов
/ 25 апреля 2019

Я думаю, что лучший способ - использовать промежуточное ПО laravel

0 голосов
/ 25 апреля 2019

Вы можете поместить код, показанный в функции __construct вашего контроллера, и предоставить его в качестве защищенной переменной для класса.

...