Frage

Ich arbeite an einer Anwendung, die über ihr REST PHP SDK eine Verbindung zur Intuit Quickbooks API herstellt.In grundlegendem PHP funktioniert alles ohne Probleme, da ich Dateien wie folgt lade:

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');

Jetzt muss ich die Bibliotheken im Symfony2-Controller aus einem Bundle verwenden und hierher kommen meine Zweifel: Wie kann ich das einfach erreichen?Ich habe viele Dokumente gelesen Link1, Symfony-Klassenladekomponente und einige andere, aber selbst das ist mir überhaupt nicht klar.Im Moment habe ich diese Struktur in meinem erstellt /vendor Ordner wie im Bild gezeigt:

vendor structure

Der config.php Die Datei, die Sie dort sehen können, enthält diesen Code:

/**
 * 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');

Und dort liegt die Magie des Klassenladens, zumindest für QBO PHP SDK, also:

  • Wie soll ich damit umgehen, um die Klasse als Symfony2 zu verwenden? Bedeutet das Erstellen von Objekten usw.?
  • Da es sich hierbei nicht um eine PSR-0-Bibliothek handelt, ist die Symfony Class Loader-Komponente die Lösung?
  • Könnten Sie mir ein paar Ideen oder sogar Code geben, der mir hilft, das zum Laufen zu bringen?
War es hilfreich?

Lösung

Symfony verwendet Composer.Der einfachste Weg, Ihr SDK einzubinden, besteht also darin, es auf die eine oder andere Weise grob mit Composer kompatibel zu machen.

Dies erfordert eine composer.json im Stammverzeichnis des Pakets.Erstelle es.

Einfachste Lösung

Fügen Sie eine Classmap-Anweisung in Ihre ein composer.json'S autoload Abschnitt :

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

Composer scannt dann rekursiv die src/ Verzeichnis beim Generieren der Autoload-Dateien.Und so wird jede Klasse bei Bedarf importiert, ohne dass die Namespaces oder ähnliches geändert werden.

Der Nachteil ist, dass die Bibliothek trotz aller Risiken immer noch nicht PSR0 folgt.

Aufwändige Lösung

PSR0-ifizieren Sie die Bibliothek, indem Sie jede Quelldatei bearbeiten, um das Recht hinzuzufügen namespace Und use Anweisungen finden Sie oben auf jeder Datei.Es ist einfach, aber angesichts der Anzahl der Klassen im SDK mühsam.

Anschließend können Sie die hinzufügen autoload Abschnitt des Pakets composer.json, so was :

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

Alternative Lösung

Als ich nach dieser API suchte, wurde ich fündig consolibyte/quickbooks-php Dies auf packagist… vielleicht einen Versuch wert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top