2016-07-26 66 views
3

我無法將該庫置於vendor/之下,因爲該目錄在.gitignore中被忽略。我把它放在bing-ads/,我有我應該在哪裏將一個庫放入Yii項目中,而這個項目通過Composer不可用?

<?php 
namespace app\models; 

include 'bing-ads\v10\bingads\ClientProxy.php'; 

use \Yii; 
use BingAds\Proxy\ClientProxy; 

要訪問它。它適用於控制檯命令/操作,但我有一種感覺,在Web調用期間它不起作用,因爲根目錄將是web/。我應該在哪裏放置這個庫,以及如何通過控制檯操作和Web操作訪問它?

The Microsoft PHP library is located here

+0

你試過了嗎?它應該工作一樣。 –

+0

@JeffPuckettII但是當它從Web服務器運行時,包含路徑會有所不同。 – Chloe

回答

-1

這是最好的外部庫的地方extensions目錄。

而且在配置做

return [ 
    'import' => [ 
     'application.extensions.bing-ads.v10.bingads.ClientProxy', 
    ], 
    ... 
]; 

在主控制檯CONFIGS。

+0

這不起作用。我想你的意思是'config/web.php'。它給出了一個錯誤:'未知屬性 - yii \ base \ UnknownPropertyException 設置未知屬性:yii \ web \ Application :: import'。沒有'import'屬性:http://www.yiiframework.com/doc-2.0/guide-structure-applications.html – Chloe

-1

我通常只是將代碼放在一個文件夾components。如果您使用的是基本模板,則該文件夾可能位於您的應用程序根目錄下;如果您使用的是高級模板,則該文件夾可以位於必要的應用程序:前端,後端,控制檯或普通。我推薦將其置於一般之中,原因我將稍後解釋

在每個應用配置下,Yii 2使用::setAlias方法爲密鑰文件夾分配不同的別名。在基本應用程序模板中,@app指向應用程序根目錄。雖然在高級模板@app可能指任何後端,前端或控制檯。

如果你的庫中的代碼是在後臺,您可以訪問它像這樣

namespace backend\controllers; 

use yii\web\Controller; 
use backend\components\MyLibCode; 

class SiteController extends Controller 
{ 
    public function actionIndex() 
    { 
     $mlb = new MyLibCode(); 
     // ... 
    } 
} 

然而,它是很好的Yii 2做法有在common文件夾公共庫代碼。所以,如果這個庫中的代碼是跨應用程序使用,我建議你把它放入common\components文件夾,替換backendcommonuse聲明在上面的代碼。

P.S:Justinas method也適用;它是從Yii 1借來的。但是這可能會變得很麻煩,因爲這要求Yii在應用程序啓動時加載類。如果該文件中有一些重要的東西,它可能會對應用程序的性能造成不利影響。

+0

好吧,我把文件夾移到'components \ bing-ads'並註釋掉了include( )'行並將'component'添加到所有'use'行,但它給出了一個錯誤:在/ cygdrive/c/Users/Chloe中找不到'PHP致命錯誤:類'組件\ BingAds \ v10 \ CampaignManagement \ MatchType' 413行上的/workspace/bestsales/models/BingAds.php。包含哪些文件? PHP如何知道類? – Chloe

+0

爲什麼文件路徑與使用的命名空間有關?爲什麼我需要將'components \'添加到名稱空間,只是因爲它在該目錄中? – Chloe

+0

Yii 2試圖符合PSR-4標準。這是你的命名空間和文件路徑應該對應的。 – iGbanam

2

我通過將文件路徑的composer.jsonautoload部發現了一種方法。我記得我也必須爲其他一些圖書館做到這一點,甚至可以通過Composer使用。

"autoload": { 
    "classmap": [ 
    "vendor/googleads/googleads-php-lib/src/Google/Api/Ads/Common/Util", 
    "vendor/googleads/googleads-php-lib/src/Google/Api/Ads/AdWords/Util/v201605", 
    "bing-ads/v9/bingads/CustomerManagementClasses.php", 
    "bing-ads/v10/bingads/v10/CampaignManagementClasses.php", 
    "bing-ads/v10/bingads/v10/BulkClasses.php", 
    "bing-ads/v10/bingads/ClientProxy.php" 
    ] 
} 

然後我跑

$ composer install 
... 
Generating autoload files 

我不知道這是雖然最佳途徑。

+0

有趣。我沒有想到這 – iGbanam

1

您可以將它們存儲在任何地方,例如,在名爲「BingAds」的文件夾中。

只需添加別名作爲例子,其中包括在您的控制檯,以及在你的web應用例如一個共同的基礎配置文件/common/config/base.php/web/index.php

$config = \yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../common/config/base.php'), 
    require(__DIR__ . '/../common/config/web.php'), 
    require(__DIR__ . '/../config/base.php'), 
    require(__DIR__ . '/../config/web.php') 
); 

這裏面common/config/base.php您可以添加哪些是有效的控制檯和Web應用程序都設置,擴展等

<?php 
$config = [ 
    ... 
    'aliases' => [ 
     '@BingAds' => '@app/BingAds/v10', 
     '@BingAds/Proxy' => '@app/BingAds/v10/bingads', 
    ], 
]; 

Clientproxy.php存儲爲例如在目錄/BingAds/Proxy/

然後,您不必在每次要使用它們時都包含您的文件,只需寫入即可。

use BingAds\Proxy\ClientProxy; 

我已經解開你的鏈接zip文件和目錄Bing Ads API in PHP\PHP\Bing Ads API in PHP的文件存儲到我的應用程序根目錄BingAds蒙山上面提到的別名。

我已通過在控制檯和Web應用程序中創建clientProxy對象來測試它。

$test = new ClientProxy('test'); 
var_dump($test); 

兩個打印出來

object(BingAds\Proxy\ClientProxy)[140] 
    private 'authenticationToken' => null 
    private 'username' => null 
    private 'password' => null 
    private 'developerToken' => null 
    private 'wsdlUrl' => string 'test' (length=4) 
    private 'accountId' => null 
    private 'customerId' => null 
    private 'service' => null 
    private 'namespace' => null 

我haven`t測試了其他類,但我猜你得到它是如何工作的。

+0

我沒有'common /'目錄。這是我的'web/index.php'的內容:http://pastebin.com/EW1UJnHb你可以忽略信號的東西 - 我正在測試一些回收服務器的東西。 – Chloe

+0

我剛剛有一個「common」目錄來存儲用於後端,前端和控制檯的東西,這是來自高級模板。在我的例子中,配置存儲在那裏。 當然,您可以直接將它添加到控制檯和網絡配置中。 – BHoft

0

添加到您的composer.json:

{ 
    "repositories": [ 
     { 
      "type": "package", 
      "package": { 
       "name": "microsoft/bing-ads", 
       "version": "9.0.0", 
       "dist": { 
        "url": "https://code.msdn.microsoft.com/Bing-Ads-API-Version-9-in-fb27761f/file/159208/2/Bing%20Ads%20API%20in%20PHP.zip", 
        "type": "zip" 
       }, 
       "autoload": { 
        "classmap": [ 
         "PHP/Bing Ads API in PHP/v10/bingads/" 
        ] 
       } 
      } 
     } 
    ], 


    "require": { 
     "microsoft/bing-ads": "9.0.0" 
    } 
} 

然後加入作曲家產生autload.php文件,如果你還沒有準備好。 然後,您可以在不包含的情況下調用BingAds \ Proxy \ ClientProxy()。

沒有更好的辦法:)

相關問題