2016-08-03 13 views
0

Verwendung habe ich einen symfony 2.8 app, und in der composer.json Datei Ich habe die HTMLPurifier Bibliothek, die ich verwenden möchte:einen Komponisten installiertes Paket direkt in Symfony

"require": { 
     ... 
     "ezyang/htmlpurifier": "^4.8" 
}, 

Es installiert und ich kann die Bibliothek sehen in mein /vendor/ Verzeichnis. Der Composer stellt automatisch eine Namensraumzuordnung für mich bereit.

return array(
    ... 
    'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'), 
    ... 
); 

und die Anweisungen auf the main site Zustand, dass Sie den Autoloader benötigen und dann die verschiedenen Klassen verwenden.

<?php 
    require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php'; 

    $config = HTMLPurifier_Config::createDefault(); //defined in HTMLPurifier\Config.php 
    $purifier = new HTMLPurifier($config); //defined in HTMLPurifier\HTMLPurifier.php 
    $clean_html = $purifier->purify($dirty_html); 
?> 

Fair enough, jetzt das Problem, das ich habe, ist die verflixte Bibliothek.

in meiner Klasse hatte ich use \HTMLPurifier\HTMLPurifier.auto; Das war ein Syntaxfehler (es gibt keine Perioden in einer use Anweisung). So

Ich habe versucht,

use \HTMLPurifier\Config; 

class Test 
{ 
    public function blah() 
    { 
     $config = Config::createDefault(); 
    } 
} 

aber Symfony darüber beschwert, dass sie die Config-Datei gefunden, aber der Klassenname war nicht das gleiche (der Dateiname Config.php und der Klassenname ist HTMLPurifier_Config). Ich versuchte, die use-Anweisung mit use \HTMLPurifier\Config as HTMLPurifier_Config; zu ersetzen, und es gab mir den gleichen Fehler, behauptete, es kann die Datei finden, aber nicht die Klasse.

Also ich bin verwirrt. Was ist der beste Weg, um mit Composer-installierten Bibliotheken umzugehen, die eine Autoloader-Datei haben, die alle Klassen für diese Bibliothek lädt? Muss ich alle Klassen so ändern, dass sie mit den Dateinamen übereinstimmen oder umgekehrt, so dass der Symfony Autoloader sie verwendet? Oder gibt es einen einfacheren Weg, den ich einfach übersehe?

Wie immer, danke.

Antwort

2

Sie haben nicht Namespace aufgerufen. Folgen Sie Codebeispiel funktioniert

use HTMLPurifier_Config as Config; 

class Test 
{ 
    public function blah() 
    { 
     $config = Config::createDefault(); 
    } 
} 

Dank

+0

Oder benutzen Sie einfach '$ config = \ HTMLPurifier_Config :: createDefault();' – qooplmao