希望将phpmailer库添加到Zend Framework设置

时间:2011-05-04 21:22:43

标签: php zend-framework phpmailer

向ZF添加和访问库的最佳做法是什么?我正在尝试添加phpmailer,我应该将它添加到库文件夹中吗?我现在如何访问此文件,因为它不使用ZF命名约定。谢谢!

2 个答案:

答案 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;