我正在构建一个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惯例,并且可能比我应该做的更难(尽管这种自动加载的东西似乎是比它应该更难)。
答案 0 :(得分:4)
您可能会尝试为Crypt_RSA供应商软件包创建自定义自动加载器,并将其注册到ProjectConfiguration中,因为它们presented in the Jobeet documentation(使用Zend Lucene时)。