我无法将库放在vendor/
下,因为.gitignore
会忽略该目录。我把它放在bing-ads/
下面,我有
<?php
namespace app\models;
include 'bing-ads\v10\bingads\ClientProxy.php';
use \Yii;
use BingAds\Proxy\ClientProxy;
访问它。它适用于控制台命令/操作,但我觉得它在Web调用期间不起作用,因为根目录将是web/
。我应该把这个库放在哪里,如何通过控制台操作和Web操作来访问它?
答案 0 :(得分:2)
我找到了一种方法,将文件路径添加到autoload
的{{1}}部分。我记得我必须为其他一些库做这些,甚至是通过Composer提供的库。
composer.json
然后我跑了
"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"
]
}
我不确定这是最好的方法。
答案 1 :(得分:1)
您可以将它们存储在任何地方,例如:在名为“BingAds”的文件夹中。
只需将别名作为示例添加到公共基本配置文件/common/config/base.php
中,该文件包含在您的控制台以及Web应用程序中,例如为您的/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
我还没有测试过其他课程,但我想你知道它是如何运作的。
答案 2 :(得分: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"
}
}
然后添加composer生成的autload.php文件(如果还没有)。 然后你可以调用BingAds \ Proxy \ ClientProxy()而不包含。
没有更好的方法:)
答案 3 :(得分:-1)
最好将外部库放到extensions
目录。
在配置中
return [
'import' => [
'application.extensions.bing-ads.v10.bingads.ClientProxy',
],
...
];
在主配置和控制台配置中。
答案 4 :(得分:-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();
// ...
}
}
然而,在common
文件夹中使用公共库代码是很好的Yii 2练习。因此,如果要在各个应用中使用此库代码,我建议您将其放入common\components
文件夹,并将backend
替换为上面代码中common
语句中的use
p.s:Justinas method也有效;它是从Yii 1借用的。但这可能会变得很麻烦,因为这要求Yii在应用程序启动时加载类。如果该文件中存在一些繁重的内容,则可能对应用程序的性能有害。