Symfony的自动加载供应商文件似乎不起作用

时间:2011-01-26 02:43:35

标签: symfony1 symfony-1.4 autoload vendor

我正在构建一个Symfony 1.4项目,我正在尝试使用PEAR的Crypt_RSA包。不幸的是,该软件包暂时没有更新,所以我没有从命令行执行简单的pear install,而是将其包含在我的lib/vendor项目路径中,以便我可以修改各个部分用于PHP5的代码。 (它目前会导致一些警告和严格的错误,我不想禁用严格的错误检查)。

我在autoload.yml路径中创建了一个config文件,该文件现在包含以下内容:

autoload:
    Crypt_RSA:
        path:      %SF_LIB_DIR%/vendor/Crypt
        recursive: true

然后我尝试以下列方式使用Crypt_RSA_KeyPair类(source):

$keyPair = new Crypt_RSA_KeyPair(128);

这会导致以下错误:

  

警告:require_once(Crypt / RSA / ErrorHandler.php)[function.require-once]:无法打开流: / app_path / lib / vendor中没有此类文件或目录/Crypt/RSA/KeyPair.php 在线 28

     

致命错误:require_once()[function.require]:无法打开所需的'Crypt / RSA / ErrorHandler.php'(include_path ='。:/ opt / local / lib / php ')在 /app_path/lib/vendor/Crypt/RSA/KeyPair.php 28

查看Crypt / RSA.php文件(source),它有对Crypt / RSA / ErrorHandler.php,Crypt / RSA / MathLoader.php,Crypt / RSA / Key.php的require_once调用,以及Crypt / RSA / KeyPair.php,所以我想我不希望symfony自动加载所有东西(即:不是递归自动加载) - 只是RSA.php文件。但是,require_once调用都是特定于包含Crypt文件夹的文件夹,这意味着自动加载需要确保在加载RSA.php时,它从正确的路径加载它,以便可以正确加载每个文件。

考虑到这一点,我尝试了几个不同的设置而没有运气:

autoload:
    Crypt_RSA:
        path:      %SF_LIB_DIR%/vendor
        files:     [Crypt/RSA.php]
        recursive: false

# moved "Crypt" folder into a subfolder named "pear"
autoload:
    Crypt_RSA:
        path:      %SF_LIB_DIR%/vendor/pear
        recursive: false

这些新尝试中的每一个都导致了一个不同的错误,即Crypt_RSA_KeyPair类完全没有找到。

  

致命错误 /app_path/lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardUser.class.php 上找不到“强健> 70 <上的

我已尝试深入研究文档,但我的大多数Google搜索都指向1.0而不是1.4的Symfony文档,并且所有文档在自动加载供应商文件时通常都很模糊。

我想另一种选择是手动require_once我需要的RSA.php文件,但我猜这会违反Symfony惯例,并且可能比我应该做的更难(尽管这种自动加载的东西似乎是比它应该更难)。

1 个答案:

答案 0 :(得分:4)

您可能会尝试为Crypt_RSA供应商软件包创建自定义自动加载器,并将其注册到ProjectConfiguration中,因为它们presented in the Jobeet documentation(使用Zend Lucene时)。