/ / Utilizzo di un pacchetto installato dal compositore direttamente in Symfony - symfony, composer-php

Usando un pacchetto installato dal compositore direttamente in Symfony - symfony, composer-php

Ho un'app di symfony 2.8 e nella composer.json file Ho la libreria htmlpurifier che voglio usare:

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

Si installa e posso vedere la libreria nella mia /vendor/ directory. Il compositore inserisce automaticamente un mapping di spazio dei nomi da utilizzare.

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

e le istruzioni su il sito principale affermare che è necessario il caricatore automatico e quindi utilizzare le varie classi.

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

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

Abbastanza giusto, ora il problema che sto avendo sta usando la libreria darn.

nella mia classe che ho avuto use HTMLPurifierHTMLPurifier.auto; Che era un errore di sintassi (non ci dovrebbero essere periodi in a use dichiarazione).

Così ho provato,

use HTMLPurifierConfig;

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

ma Symfony si è lamentato di aver trovato il file di configurazione, ma il nome della classe non era lo stesso (il nome del file lo è Config.php e il nome della classe è HTMLPurifier_Config). Ho provato a sostituire la dichiarazione di utilizzo con use HTMLPurifierConfig as HTMLPurifier_Config; E mi ha dato lo stesso errore, sostenendo che può trovare il file ma non la classe.

Quindi sono confuso. Qual è il modo migliore per gestire le librerie installate di compositore che hanno un file autoloader che carica tutte le classi per quella libreria? Devo cambiare tutte le classi in modo che corrispondano ai nomi dei file o visa-versa così il caricatore automatico Symfony userà loro? O c'è un modo più semplice che sto semplicemente trascurando?

Come sempre, grazie.

risposte:

2 per risposta № 1

Hai chiamato Namespace non esistente. Seguirà l'esempio del codice funzionerà

use HTMLPurifier_Config as Config;

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

Grazie