2012-01-09 15 views
6

Sto tentando di aggiungere una libreria esterna (PHP Simple DOM Parser, http://simplehtmldom.sourceforge.net/index.htm) a un progetto Symfony2. Ho seguito un tutorial che spiega come includere librerie di terze parti in Symfony2 http://www.kiwwito.com/article/add-third-party-libraries-to-symfony-2.Aggiungere librerie esterne al progetto Symfony2

ho creato un file di classe come:

# vendor/phpsimpledom/lib/Phpsimpledom/simple_html_dom.php 

require_once __DIR__.'/src/simple_html_dom.php'; 

class Phpsimpledom_Phpsimpledom extends simple_html_dom_node { 
} 

e registrato la mia classe nel mio caricatore automatico (autoload.php):

$loader->registerNamespaces(array(
... 
'Phpsimpledom' => __DIR__.'/../vendor/phpsimpledom/lib/', 
... 
),)); 

sto provando a chiamare:

$phpsimpledom = new \Phpsimpledom(); 

ma questo mi fa passare un errore (errore irreversibile: classe 'simple_html_dom_node' non trovato).

Tuttavia: il file principale della libreria (simple_html_dom.php) è costituito da funzioni che non appartengono a una classe.

Quando provo ad utilizzare direttamente il file, ma anche non funziona:

$loader->registerNamespaces(array(
... 
'Phpsimpledom' => __DIR__.'/../vendor/phpsimpledom/lib/Phpsimpledom/src/simple_html_dom.php', 
... 
),)); 

Eventuali suggerimenti?

GRAZIE!

risposta

8

Stai cercando di registrare uno spazio dei nomi ma la tua classe non ha spazio dei nomi. Prova ad aggiungere uno spazio dei nomi o usa RegisterPrefixes().

BTW: lo sapevate che uno dei componenti di Symfony sta praticamente facendo la stessa cosa di php simple? Si chiama DomCrawler e ha un supporto per selettori xpath e CSS.

2

Sono nuovo di Symfony2 ma, come posso vedere, non si rispetta il PSR per il caricatore automatico.

Sono presumibile pensare che si dovrebbe fare:

# /vendor/phpsimpledom/lib/Phpsimpledom/Phpsimpledom.php 

require_once __DIR__.'/src/simple_html_dom.php'; 

class Phpsimpledom_Phpsimpledom extends simple_html_dom_node { 

} 

Si noti che il nome del file corretta sarebbe /vendor/phpsimpledom/lib/Phpsimpledom/Phpsimpledom.php come la chiamata deve includere il namespace di lavorare.

Spero che funzioni ora.

Problemi correlati