Использование SwiftMailer внутри класса Restler

Пытаюсь понять, как использовать SwiftMailer внутри Restler. Я думаю, что я могу просто включить это неправильно. Согласно документации SwiftMailer, все, что мне нужно сделать, это включить один файл через < strong>require_once, и их автозагрузчик делает всю магию, но я продолжаю получать ошибки Class not found. Предположительно Restler хорошо взаимодействует с другими автозагрузчиками.

Я пробовал следующий код в разных местах моих файлов рестлера (поместил require_once в index.php, а также внутри класса с остальной частью кода).

class Remind {
    function post($request_data=NULL) {

[фрагмент]

        require_once('../../Swift/lib/swift_required.php');
        $transport = Swift_MailTransport::newInstance();                        // Create the transport; use php mail
        $mailer = Swift_Mailer::newInstance($transport);                         // Create the Mailer using your created Transport
        $message = Swift_Message::newInstance()                             // Create the message
        ->setPriority($priority)                                                // Give the message a priority, 1 through 5, 1 being the highest.
        ->setSubject($subject)                                              // Give the message a subject
        ->setFrom(array($from_email => $from_name))                          // Set the From address with an associative array
        ->setTo(array($to_email => $to_name))                                // Set the To addresses with an associative array
        ->setReadReceiptTo(SYS_EMAIL)                                          // Send read receipts to Support
        ->setBody('Here is the message itself')                            // Give it a body
        ->addPart('<q>Here is the message itself</q>', 'text/html')        // And optionally an alternative body
        ;
    $result = $mailer->send($message);                                    // Send the message
    }
}

Ошибка:

Fatal error:  Class 'Swift_MailTransport' not found in /home/[snip]/public_html/[snip].php on line 63

person Andrew Bucklin    schedule 01.07.2013    source источник


Ответы (2)


Недавно у меня было похожее желание включить Swift Mailer в другой класс. Решение заключалось в том, чтобы включить swift_required.php вне класса-оболочки, а затем создать класс, расширенный Swift_Mailer. В нем вы можете сослаться на класс Swift_Message:

require 'path/to/swift_mailer/library/lib/swift_required.php';

class Remind extends Swift_Mailer {
    function post($request_data=NULL) {
        $transport = Swift_SmtpTransport::newInstance()
    ->setHost('host')
    ->setPort('port')
    ->setUsername('username')
    ->setPassword('password')

        $mailer = Swift_Mailer::newInstance($transport);
        $message = Swift_Message::newInstance()
            ->setPriority($priority)
            ->setSubject($subject)
            ->setFrom(array($from_email => $from_name))
            ->setTo(array($to_email => $to_name))
            ->setReadReceiptTo(SYS_EMAIL)
            ->setBody('Here is the message itself')
            ->addPart('<q>Here is the message itself</q>', 'text/html')
        ;
        $result = $mailer->send($message);
    }    
}
person Codedragon    schedule 15.09.2013

Начиная с Restler 3 RC4 (в настоящее время доступен в ветке v3) вы можете использовать автозагрузчик композитора.

Используйте следующий composer.json для установки Restler и SwifftMailer.

{
    "require" : {
        "luracast/restler" : "3.x-dev",
        "swiftmailer/swiftmailer" : "4.1.7"
    }
}

Прочтите о композиторе на странице http://getcomposer.org/.

person Community    schedule 07.08.2013
comment
Что, если вы используете это на провайдере виртуального хостинга? - person Andrew Bucklin; 07.08.2013
comment
Вы можете запустить composer на своем компьютере для разработки и загрузить все полученные файлы. Большую часть времени это то, что мы делаем - person Arul Kumaran; 08.08.2013