Търся да добавя библиотека phpmailer към настройката на Zend Framework

каква е най-добрата практика за добавяне и достъп до библиотеки към ZF? Опитвам се да добавя phpmailer, трябва ли просто да го добавя в папката на библиотеката? Как мога да получа достъп до този файл сега, след като той не използва конвенциите за именуване на ZF. Благодаря!


person blacktie24    schedule 04.05.2011    source източник
comment
Трябва ли тези библиотеки да се използват и от други приложения в същата система или само от вашето приложение? Коя ОС използвате?   -  person hakre    schedule 05.05.2011
comment
Хей hakre, благодаря за отговора. Библиотеката просто трябва да се използва от моето приложение, а аз използвам Windows Vista, но защо ОС има значение?   -  person blacktie24    schedule 05.05.2011
comment
ОС може да има значение, ако ОС предоставя пакет с библиотеката. Vista не го прави. Склонен съм да предложа да го добавите в папката на библиотеката и да включите файла във вашия bootstrap, но може да помислите да го добавите към autoloader също. Но аз не съм ZF професионалист с бърз пример под ръка.   -  person hakre    schedule 05.05.2011
comment
Поставям всички библиотеки на трети страни в папката на библиотеката и, ако е възможно, използвам автоматичното зареждане на Zend, за да ги заредя или просто ги препращам с помощта на include realpath(APPLICATION_PATH . '/../library/the_lib/script.php');). Повечето от моите проекти разчитат на Propel, TCPDF и някои специфични за компанията библиотеки, използващи този подход.   -  person wimvds    schedule 05.05.2011


Отговори (2)


Простото решение е да пуснете класа PHPMailer (и всички други файлове) в папката на вашата библиотека.

Тъй като PHPMailer изглежда използва конвенция за имена на файлове, която няма да се приложи добре към автоматичното зареждане (class.phpmailer.php), просто бих изискал файла на класа във вашия Bootstrap

След това трябва да можете да създадете нов PHPMailer клас навсякъде в приложението си.

Можете да опитате да регистрирате автоматично зареждане, което да преобразува името на класа PHPMailer до class.phpmailer.php, но IMO не си струва усилието.

АКТУАЛИЗАЦИЯ

Като се замисля, бих игнорирал частта за Bootstrap и просто бих изисквал класа, когато е необходим (да речем във вашия контролер). Тъй като файлът е във вашия път за включване, всичко, от което се нуждаете, е

require_once 'class.phpmailer.php';
$mailer = new PHPMailer;
person Phil    schedule 05.05.2011

Пуснете съответните файлове в папката на библиотеката. Тогава можете да създадете автоматично зареждане нещо подобно:

Във файл 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());
}

Направих нещо подобно за примери с по-ангажирано именуване/картографиране на наследени класове и беше доста полезно.

person David Weinraub    schedule 05.05.2011
comment
Значи имате нужда от два класа (автоматично зареждане и PHPMailer), за да заредите един клас? За библиотеката PHPMailer с един клас не мисля, че си струва усилието. Все пак +1 за добър отговор - person Phil; 05.05.2011
comment
@Phil: Добре, въпреки че този клас за автоматично зареждане е доста малък, така че спестява необходимостта да зареждате по-големия клас PHPmailer при тези заявки, където не се използва. От друга страна, има допълнителни разходи за автоматичното зареждане. Както казахте, вероятно не си струва усилието в този случай; най-вече се опитват да демонстрират техниката. Благодаря за гласуването за. наздраве! ;-) - person David Weinraub; 05.05.2011