каква е най-добрата практика за добавяне и достъп до библиотеки към ZF? Опитвам се да добавя phpmailer, трябва ли просто да го добавя в папката на библиотеката? Как мога да получа достъп до този файл сега, след като той не използва конвенциите за именуване на ZF. Благодаря!
Търся да добавя библиотека phpmailer към настройката на Zend Framework
Отговори (2)
Простото решение е да пуснете класа PHPMailer (и всички други файлове) в папката на вашата библиотека.
Тъй като PHPMailer изглежда използва конвенция за имена на файлове, която няма да се приложи добре към автоматичното зареждане (class.phpmailer.php
), просто бих изискал файла на класа във вашия Bootstrap
След това трябва да можете да създадете нов PHPMailer
клас навсякъде в приложението си.
Можете да опитате да регистрирате автоматично зареждане, което да преобразува името на класа PHPMailer
до class.phpmailer.php
, но IMO не си струва усилието.
АКТУАЛИЗАЦИЯ
Като се замисля, бих игнорирал частта за Bootstrap и просто бих изисквал класа, когато е необходим (да речем във вашия контролер). Тъй като файлът е във вашия път за включване, всичко, от което се нуждаете, е
require_once 'class.phpmailer.php';
$mailer = new PHPMailer;
Пуснете съответните файлове в папката на библиотеката. Тогава можете да създадете автоматично зареждане нещо подобно:
Във файл 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());
}
Направих нещо подобно за примери с по-ангажирано именуване/картографиране на наследени класове и беше доста полезно.
include realpath(APPLICATION_PATH . '/../library/the_lib/script.php');
). Повечето от моите проекти разчитат на Propel, TCPDF и някои специфични за компанията библиотеки, използващи този подход. - person wimvds   schedule 05.05.2011