Zend_Application_Resource_Mail が Warning。

Zend FW 1.10.1

Zend_Application_Resource_Mail が Warning 吐くのでちょっと直し。

警告の内容。


Warning: Zend_Loader::include_once(Smtp.php) [function.Zend-Loader-include-once]: failed to open stream: No such file or directory in C:\Program Files\PHP\lib\Zend\library\Zend\Loader.php on line 146

Warning: Zend_Loader::include_once() [function.include]: Failed opening 'Smtp.php' for inclusion (include_path=... [略]


ああ、Loaderねぇ。



<?php
require_once 'Zend/Application/Resource/Mail.php';

class My_Application_Resource_Mail extends Zend_Application_Resource_Mail 
{
    protected function _setupTransport($options)
    {
    	if(!isset($options['type'])) {
    		$options['type'] = 'sendmail';
    	}
    	
    	if(!isset($options['namespace'])) {
    		$options['namespace'] = 'Zend_Mail_Transport';
    	}
    	
        $transportName = $options['namespace'] . '_' . ucfirst(strtolower($options['type']));
        unset($options['type']);
		
        if(!Zend_Loader_Autoloader::autoload($transportName)) {
            throw new Zend_Application_Resource_Exception(
                "Specified Mail Transport '{$transportName}'"
                . 'could not be found'
            );
        }
        
        switch($transportName) {
            case 'Zend_Mail_Transport_Smtp':
                if(!isset($options['host'])) {
                    throw new Zend_Application_Resource_Exception(
                        'A host is necessary for smtp transport,'
                        .' but none was given');
                }
                
                $transport = new $transportName($options['host'], $options);
                break;
            case 'Zend_Mail_Transport_Sendmail':
            default:
                $transport = new $transportName($options);
                break;
        }

        return $transport;
    }
}

Loaderを呼び出してるメソッドをコピペして修正。

こんなんで良し。
たぶんZendの方で修正入ったらすぐいらなくなるでせふ。



でも、メールってそんなに使わないのにリクエストのたびに Bootstrap で初期化してインスタンス生成... ってなんか無駄な気がする。

まいっか。