2015-07-02 96 views
2

我已經使用google-api-php-client創建了一個PHP應用程序。我從Google控制檯創建了一個Google帳戶電子郵件ID,我從那裏生成了一個文件,然後將其放入我的本地服務器。這適用於「自定義」PHP。如何將Google API的PHP客戶端與Symfony 2集成?

現在我想將google-api-php-client庫與我的Symfony項目集成在一個自定義包中。我在/app/Resources內創建了一個文件夾'LIB',並且我在那裏放置了google-api-php-client的所有文件。

然後我把線下方的主控制器裏面包括autoload.php文件並訪問Google_Client類:

//require_once($this->container->getParameter('kernel.root_dir'). '/../src/ABC/Bundle/TTBundle/Lib/src/Google/autoload.php'); 
$service_account_email = '[email protected]'; 
$key_file_location = 'API-Project.p12'; 

// Create and configure a new client object. 
$client = new Google_Client(); 

,但它讓我看到以下錯誤:

FatalErrorException: Error: Class 'ABC\Bundle\TTBundle\Controller\Google_Client' not found in D:\wamp\www\TTPR\current\src\ABC\Bundle\TTBundle\Controller\WebAnalyticsController.php line 133

+0

你要的命名空間,並讓Symfony2的自動加載該類 – DonCallisto

+0

是無法加載類控制器功能裏面? – Abid

+0

是的,但你需要「指導」(自動加載)框架 – DonCallisto

回答

0

我解決問題通過以下步驟:

1-在我的控制器中創建一個功能:

2-的getService函數內部,我打電話給我自創建的函數以包括autoload.php文件:

重要的需要知道的是PUT A「反斜槓」(/)當創建CLASS對象,我缺少這個「反斜線」,浪費我的時間,希望這將有助於一些一,節省時間:)

protected function includeSsrsSdk() 
    { 
      require_once($this->container->getParameter('kernel.root_dir'). '/../src/MWAN/Bundle/BIBundle/Lib/src/Google/autoload.php'); 

    } 



public function getService() 
    { 


     $this->includeSsrsSdk(); 
     $service_account_email = '[email protected]'; 
     $key_file_location = $this->container->getParameter('kernel.root_dir'). '/../src/MWAN/Bundle/BIBundle/Lib/API-Project-xxxx.p12'; 

     // Create and configure a new client object. 
     $client = new \Google_Client(); 
     $client->setApplicationName("HelloAnalytics"); 
     $analytics = new \Google_Service_Analytics($client); 

     // Read the generated client_secrets.p12 key. 
     $key = file_get_contents($key_file_location); 
     $cred = new \Google_Auth_AssertionCredentials(
      $service_account_email, 
      array(\Google_Service_Analytics::ANALYTICS_READONLY), 
      $key 
    ); 
     $client->setAssertionCredentials($cred); 
     if($client->getAuth()->isAccessTokenExpired()) { 
     $client->getAuth()->refreshTokenWithAssertion($cred); 
     } 

     return $analytics; 
    }