将外部库添加到Symfony2项目

时间:2012-01-09 14:04:09

标签: symfony libraries

我正在尝试将一个外部库(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 {
}

并在我的Autoloader(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 个答案:

答案 0 :(得分:8)

您正在尝试注册命名空间,但您的类没有命名空间。尝试为其添加命名空间或使用RegisterPrefixes()。

BTW:你知道其中一个Symfony组件基本上和php simpledom一样吗?它被称为DomCrawler,它支持xpath和CSS选择器。

答案 1 :(得分:2)

我是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,因为调用必须包含要运行的命名空间。

希望现在有效。