PHP - swiftmailer自动加载器无法正常工作

时间:2016-06-05 16:39:59

标签: php autoload swiftmailer

我正在尝试使用swiftmailer发送交易电子邮件,但是当我尝试创建swiftmailer的对象时,我总是在Email.php中收到以下错误:

Warning: require_once(Swift/SmtpTransport.php): failed to open stream: No such file or directory in C:\xampp\htdocs\Tutorials\E-commerce\inc\autoload.php on line 13

Fatal error: require_once(): Failed opening required 'Swift/SmtpTransport.php' (include_path='C:\xampp\htdocs\Tutorials\E-commerce\classes;C:\xampp\htdocs\Tutorials\E-commerce\pages;C:\xampp\htdocs\Tutorials\E-commerce\mod;C:\xampp\htdocs\Tutorials\E-commerce\inc;C:\xampp\htdocs\Tutorials\E-commerce\template;C:\xampp\php\PEAR') in C:\xampp\htdocs\Tutorials\E-commerce\inc\autoload.php on line 13

问题是,我包括了作曲家和swiftmailer的自动加载器(单独),因此它应该找到类。我有一个自定义自动加载器但是,如果我直接包含swiftmailer的自动加载器,即使我的自动加载器没有找到类,应该触发include语句并找到它们吗? 如果我单独列出每个班级,那我就可以开始工作了,但这不太实用。

这是我的目标结构:

index.php
inc
    config.php
    autoload.php
classes
    SwiftMailer
         vendor
         composer.json
         composer.lock
    Url.php
    Core.php
    Email.php
    Login.php
    etc
pages
    login.php
    basket.php
    etc
etc

Email.php:

<?php

// I tried including them separately (also, php has no problem in finding them):
require_once 'SwiftMailer/vendor/autoload.php';
require_once 'SwiftMailer/vendor/swiftmailer/swiftmailer/lib/swift_required.php';

class Email {

    public function __construct() {
        $this->objTransport = Swift_SmtpTransport::newInstance();
        etc

autoload.php:

<?php
require_once('config.php');

function generic_autoloader($class_name) {
    $class = explode("_", $class_name); 
    $path = implode('/', $class) . '.php';
    require_once($path);

}

spl_autoload_register('generic_autoloader');

的config.php:

It's a file where I define several constants (eg: classes directory, pages directory, root path..) and at the end I have this:

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(ROOT_PATH.DS.CLASSES_DIR),
    realpath(ROOT_PATH.DS.PAGES_DIR),
    realpath(ROOT_PATH.DS.MOD_DIR),
    realpath(ROOT_PATH.DS.INC_DIR),
    realpath(ROOT_PATH.DS.TEMPLATE_DIR),
    get_include_path()
)));

我不确定这是否与问题有关(我正在学习教程,我还没有完全理解这部分代码),所以我会把它留在这里:< / p>

的index.php:

<?php
require_once('inc/autoload.php');

$core = new Core();
$core->run();

core.php中:

<?php

class Core {
    public function run() {
        ob_start();
        require_once(Url::getPage()); // Url::getPage just returns the path of the current page ($_GET['page'])
        ob_get_flush();
    }
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果右侧文件夹中确实存在SmtpTransport.php文件,则错误似乎正是它所说的错误:文件名错误。

你应该替换

$this->objTransport = Swift_SmtpTransport::newInstance();

通过

$this->objTransport = SwiftMailer_SmtpTransport::newInstance();

您还应该包含作曲家的自动加载文件(供应商内部的自动加载文件)