Вызов Google_Client из статического метода в контроллере с использованием Slim 3

Мне нужно создать нового пользователя в Google, и я использую Slim 3 для создания REST API.

Мой код:

композитор.json:

"require": {
    "somethig": "somethig",
    "google/apiclient": "2.0"
},
"autoload": {
    "psr-4": {
        "App\\": "app/"
    }
}

маршруты.php:

$app->get('/users/create', App\Controllers\UserController::class . ':create_users');

UserController.php:

use App\Models\UserModel;

class UserController{

   public static function create_users( Request $request, Response $response, array $args )
   {
      // some code

      $users = UserModel::where( 'pending', 0 )->get(); // WORKS OK

      // some more code

      self::get_google_client();
   }


   private function get_google_client()
   {
     $client = new Google_Client(); // ERROR: Class 'App\Controllers\Google_Client'

     // a lot more code, based on quickstart.php

   }
} // class end

Я хочу получить доступ к Google_Client, как и к UserModel, но не могу понять, как это сделать.

Если я использую его в route.php, он работает.

$app->get('/g', function ($request, $response, $args) {
    $client = new Google_Client(); // THIS WORKS!!

    var_dump($client);
});

Google_Clientclass определен в \vendor\google\apiclient\src\Google\client.php.


person Satelier Diego    schedule 17.10.2018    source источник


Ответы (1)


Google_Client существует в корневом пространстве имен.

Когда вы пытаетесь сделать:

$client = new Google_Client()

Он ищет класс в пространстве имен для файла, в котором находится оператор.

Это работает в routes.php, потому что в этом файле не объявлено пространство имен. Но поскольку ваш контроллер находится в пространстве имен, вы получаете ошибку, которую видите.

Чтобы этого избежать, просто сделайте следующее:

$client = new \Google_Client();

Явно сказать, что Google_Client находится в корневом пространстве имен.

person yivi    schedule 18.10.2018