向ZF添加和访问库的最佳做法是什么?我正在尝试添加phpmailer,我应该将它添加到库文件夹中吗?我现在如何访问此文件,因为它不使用ZF命名约定。谢谢!
答案 0 :(得分:4)
将相关文件拖放到库文件夹中。然后你可以创建一个像这样的自动加载器:
在文件library/My/Loader/Autoloader/PhpMailer.php
中:
class My_Loader_Autoloader_PhpMailer implements Zend_Loader_Autoloader_Interface
{
/**
* Autoload a class
*
* @param string $class
* @return mixed
* False [if unable to load $class]
* $class [if $class is successfully loaded]
*/
public function autoload($class)
{
if ('PHPMailer' === $class) {
include 'class.phpmailer.php';
return $class;
}
return false;
}
}
然后将此自动加载器添加到ZF自动加载器堆栈,可能在Bootstrap
中:
protected function _initAutoloader()
{
$autoloader = Zend_Loader_Autoloader::getInstance();
// The following is not necessary if My_ is already a registered namespace
// in the ZF autoloader
require 'My/Loader/Autoloader/PhpMailer.php';
$autoloader->pushAutoloader(new My_Loader_Autoloader_PhpMailer());
}
我已经做了类似这样的事情,其中包含更多涉及遗留类命名/映射的示例,并且它非常有用。
答案 1 :(得分:3)
简单的解决方案是将PHPMailer类(以及任何其他文件)放入库文件夹中。
由于PHPMailer似乎使用的文件名约定不适用于自动加载器( class.phpmailer.php
),我只需要你的Bootstrap中的类文件
然后,您应该可以在应用中的任何位置创建新的 PHPMailer
课程。
您可以尝试注册一个将类名PHPMailer
映射到class.phpmailer.php
的自动加载器,但IMO不值得付出努力。
<强>更新强>
想一想,我会忽略Bootstrap部分,只需要在需要时(比如在你的控制器中)。由于文件位于包含路径中,您只需要
require_once 'class.phpmailer.php';
$mailer = new PHPMailer;