문제

저는 REST PHP SDK를 통해 Intuit Quickbooks API에 연결할 애플리케이션을 개발 중입니다.기본 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 컨트롤러의 라이브러리를 사용해야 하는데 이것이 의심의 근원입니다. 어떻게 쉽게 달성할 수 있습니까?나는 많은 문서를 읽었다. 링크1, Symfony 클래스 로더 구성요소 그리고 다른 것들도 나에게는 전혀 명확하지 않습니다.지금은 내 컴퓨터에 이 구조를 만들었습니다. /vendor 이미지에 표시된 폴더:

vendor structure

그만큼 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 Class Loader Component가 솔루션이 될까요?
  • 이 작업을 수행하는 데 도움이 되는 몇 가지 아이디어나 코드를 제공해 주시겠습니까?
도움이 되었습니까?

해결책

Symfony는 Composer를 사용합니다.따라서 SDK를 포함하는 가장 간단한 방법은 어떤 식으로든 Composer와 대략 호환되도록 만드는 것입니다.

이를 위해서는 composer.json 패키지의 루트에 있습니다.그것을 창조하십시오.

가장 간단한 솔루션

클래스맵 지침을 composer.json'에스 autoload 부분 :

"autoload": {
    "classmap": ['src/'],
},

그러면 Composer가 재귀적으로 스캔합니다. src/ 자동 로드 파일을 생성할 때 디렉터리입니다.따라서 네임스페이스나 어떤 것도 변경하지 않고 필요할 때 모든 클래스를 가져올 수 있습니다.

단점은 라이브러리가 모든 위험을 포함하여 여전히 PSR0을 따르지 않는다는 것입니다.

힘든 솔루션

PSR0-각 소스 파일을 편집하여 라이브러리를 수정하여 권한을 추가합니다. namespace 그리고 use 각 파일 위에 명령이 있습니다.간단하지만 SDK의 클래스 수를 고려하면 시간이 많이 걸립니다.

그런 다음 autoload 패키지의 섹션 composer.json, 이와 같이 :

"autoload": {
    "psr-0": {
        "QBO\\": "src/"
    }
},

대체 솔루션

이 API를 검색하다가 발견했습니다. 콘솔리바이트/quickbooks-php packagest에 관한 내용입니다... 시도해 볼 가치가 있을 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top