Добавить внешние библиотеки в проект Symfony2 - PullRequest
6 голосов
/ 09 января 2012

Я пытаюсь добавить внешнюю библиотеку (PHP Simple DOM Parser, http://simplehtmldom.sourceforge.net/index.htm) к проекту Symfony2. Я взял учебник, в котором объясняется, как включать сторонние библиотеки в Symfony2 http://www.kiwwito.com/article/add-third-party-libraries-to-symfony-2.

Я установил файл класса как:

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

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

class Phpsimpledom_Phpsimpledom extends simple_html_dom_node {
}

и зарегистрировал мой класс в моем автозагрузчике (autoload.php):

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

Я пытаюсь позвонить:

$phpsimpledom = new \Phpsimpledom();

но это приводит к ошибке (фатальная ошибка: класс 'simple_html_dom_node' не найден).

Однако: основной файл библиотеки (simple_html_dom.php) состоит из функций, которые не принадлежат классу.

Когда я пытаюсь использовать файл напрямую, он также не работает:

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

Есть подсказки?

СПАСИБО!

Ответы [ 2 ]

8 голосов
/ 09 января 2012

Вы пытаетесь зарегистрировать пространство имен, но у вашего класса нет пространства имен.Попробуйте добавить к нему пространство имен или используйте RegisterPrefixes ().

Кстати: знаете ли вы, что один из компонентов Symfony делает то же самое, что и php simpledom?Он называется DomCrawler и поддерживает как селекторы xpath, так и CSS.

2 голосов
/ 04 апреля 2012

Я новичок в Symfony2, но, как я вижу, вы не уважаете PSR для автозагрузчика.

Я полагаю, вы должны сделать:

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

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

class Phpsimpledom_Phpsimpledom extends simple_html_dom_node {

}

Обратите внимание, чтоправильное имя файла будет /vendor/phpsimpledom/lib/Phpsimpledom/Phpsimpledom.php, так как вызов должен включать пространство имен для работы.

Надеюсь, что это работает сейчас.

...