Symfony2プロジェクトで外付けの非PSR-0ライブラリを使用する正しい方法
-
21-12-2019 - |
質問
Intuit QuickBooks API Trough Trough Trough Trough Troughに接続するアプリケーションに取り組んでいますPHP SDK。基本的なPHPでは、ファイルをロードしてから問題なく動作しています。
require_once('../api/config.php'); // Default V3 PHP SDK (v2.0.1) from IPP
require_once(PATH_SDK_ROOT . 'Core/ServiceContext.php');
require_once(PATH_SDK_ROOT . 'DataService/DataService.php');
require_once(PATH_SDK_ROOT . 'PlatformService/PlatformService.php');
require_once(PATH_SDK_ROOT . 'Utility/Configuration/ConfigurationManager.php');
.
今、Symfony2コントローラのライブラリをバンドルから使用する必要があります。私はたくさんのドキュメントを読みました link1 、 symfonyクラスローダーコンポーネントといくつかの他のものもまったく明確ではありません。今のところ、image show
としての/vendor
フォルダにこの構造を作成しました。
あなたのものが見ることができるconfig.php
ファイルはこのコードを持っています:
/**
* This file allows custom configuration of paths for XSD2PHP dependencies and
* POPO classes. Rarely necessary, but possible.
*
* @author Intuit Partner Platform Team
* @version 1.0
*/
// Determine parent path for SDK
$sdkDir = __DIR__ . DIRECTORY_SEPARATOR;
if (!defined('PATH_SDK_ROOT'))
define('PATH_SDK_ROOT', $sdkDir);
// Specify POPO class path; typically a direct child of the SDK path
if (!defined('POPO_CLASS_PATH'))
define('POPO_CLASS_PATH', $sdkDir . 'Data');
// Include XSD2PHP dependencies for marshalling and unmarshalling
use com\mikebevz\xsd2php;
require_once(PATH_SDK_ROOT . 'Dependencies/XSD2PHP/src/com/mikebevz/xsd2php/Php2Xml.php');
require_once(PATH_SDK_ROOT . 'Dependencies/XSD2PHP/src/com/mikebevz/xsd2php/Bind.php');
// Includes all POPO classes; these are the source, dest, or both of the marshalling
set_include_path(get_include_path() . PATH_SEPARATOR . POPO_CLASS_PATH);
foreach (glob(POPO_CLASS_PATH.'/*.php') as $filename)
require_once($filename);
// Specify the prefix pre-pended to POPO class names. If you modify this value, you
// also need to rebuild the POPO classes, with the same prefix
if (!defined('PHP_CLASS_PREFIX'))
define('PHP_CLASS_PREFIX', 'IPP');
.
とクラスローディングマジックが少なくともQBO PHP SDKウェイの場合、
- Symfony2としてクラスを使用するためにこれに対処する必要がありますか。
- これはPSR-0ライブラリであるため、Symfonyクラスローダーコンポーネントのソリューション?
- 私にこの作業を手に入れるのを助けるためにいくつかのアイデアやいくつかのコードを教えてください。
解決
Symfony Use Composer。それで、あなたのSDKを含める最も簡単な方法は、一方向または別の方法で、作曲家と互換性があるようにすることです。
これは、パッケージの根元にcomposer.json
を必要とします。それを作成してください。
最も簡単な解決策
composer.json
のautoload
セクションにClassMap命令を入れる:
"autoload": {
"classmap": ['src/'],
},
.
Composerは、オートロードファイルを生成するときにsrc/
ディレクトリを再帰的にスキャンします。そして、名前空間や何かを変更することなく、必要に応じてすべてのクラスがインポートされます。
下側は、ライブラリがまだPSR0に従わないことです。
面倒な溶液
PSR0-IFY各ソースファイルを編集して、各ファイルの上に右のnamespace
命令を追加します。 SDK内のクラス数を考えるのは簡単ですが面倒です。
このように、パッケージのuse
のautoload
セクションを追加できます。
"autoload": {
"psr-0": {
"QBO\\": "src/"
}
},
.
代替ソリューション
このAPIを検索するときは、 consosyte / quickbooks-php Packagist ...多分試してみてください。