2

我正在构建一个 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 ]:无法打开流:第28行的/app_path/lib/vendor/Crypt/RSA/KeyPair.php中没有这样的文件或目录

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

查看 Crypt/RSA.php 文件 ( source ),它对 Crypt/RSA/ErrorHandler.php、Crypt/RSA/MathLoader.php、Crypt/RSA/Key.php 和 Crypt/RSA/KeyPair.php 有 require_once 调用,所以我想我不希望 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 类。

致命错误:在第70行的/app_path/lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardUser.class.php中找不到类“Crypt_RSA_KeyPair”

我尝试过深入研究文档,但我的大部分 Google 搜索都指向 Symfony 文档的 1.0 而不是 1.4,而且所有文档在自动加载供应商文件方面通常都含糊不清。

我想另一种选择是手动 require_once 我需要的 RSA.php 文件,但我猜这会打破 Symfony 约定,并且可能做一些比我应该做的更难的事情(即使这个自动加载的东西似乎比它更难应该也是)。

4

1 回答 1

4

您可能会尝试为 Crypt_RSA 供应商包创建自定义自动加载器并将其注册到 ProjectConfiguration 中,正如它们在 Jobeet 文档中介绍的那样(使用 Zend Lucene 时)。

于 2011-01-26T02:52:42.283 回答