在SF2中使用第三方库

著名的PHP框架Symfony 2已经出到RC4,距离正式版本只有一步之遥。我也赶时髦安装了一下,用来改造我的任氏有无轩

SF2完全基于PHP 5.3开发,要求运行时的支持环境也是PHP5.3以上。目前我的虚拟主机还不支持PHP 5.3,不过个人认为应该快了。所以使用SF2改造我的站点也算是未雨绸缪吧。

SF2 RC4的标准版本安装已经很完整了,激活了很多第三方库,例如Monolog库,Doctrine库等。但是在实际使用中,我们一般还是会用到更多的库,比如我现在的计划中就要使用Snoopy这个浏览器模拟库,用它来抓取我的饭否话唠记录。

Symfony 1.X中,这个过程比较简单。我虽然没有测试,但是根据1.X的教程,只要将需要的库放到lib目录下即可。但是在SF2中没有那么直接。

经过一番折腾,我终于搞定了。

SF2基于namespace,所以所有的库都需要一个namespace。如果没有,那么可以简单的自己加一个。Snoopy库正是自己没有namespace的库:

namespace Snoopy;
class Snoopy {
...

经过这样简单的修改,Snoopy库就有了自己的namespace。这是第一步。 接下来,是将Snoopy库文件放到一个目录下去。在我的结构中,我将其放到vendor/Snoopy/src/Snoopy下。 随后,在autoload.php中,指定自动载入这个库:

$loader->registerNamespaces(array(
    'Symfony'          => array(__DIR__.'/../vendor/symfony/src', __DIR__.'/../vendor/bundles'),
    'Sensio'           => __DIR__.'/../vendor/bundles',
    'JMS'              => __DIR__.'/../vendor/bundles',
    'Doctrine\Common' => __DIR__.'/../vendor/doctrine-common/lib',
    'Doctrine\DBAL'   => __DIR__.'/../vendor/doctrine-dbal/lib',
    'Doctrine'         => __DIR__.'/../vendor/doctrine/lib',
    'Monolog'          => __DIR__.'/../vendor/monolog/src',
    'Assetic'          => __DIR__.'/../vendor/assetic/src',
    'Metadata'         => __DIR__.'/../vendor/metadata/src',
    'Snoopy'           => __DIR__.'/../vendor/Snoopy/src',

这样,在我需要生成Snoopy类的实例时,我就可以用:

use Snoopy;
class MiscController extends Controller {
    public function indexAction() {
        $s = NULL;
        $s = new SnoopySnoopy();
...

来操作。经过测试,一切正常。

【本文收录于[go4pro.org]】

Comments

One response to “在SF2中使用第三方库”

  1. […] 我用到了Snoopy这个库,关于如何在Symfony 2中加入第三方库的说明,参见这篇文章。 […]

Leave a Reply to 重构“任氏有无轩”——第三天 | 生活在远方 Cancel reply

Your email address will not be published. Required fields are marked *