我正在构建一个 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 约定,并且可能做一些比我应该做的更难的事情(即使这个自动加载的东西似乎比它更难应该也是)。