无法在CakePHP 2

时间:2017-09-08 13:15:26

标签: cakephp-2.0 phpmailer

在一个不相关的,普通的PHP项目中,我只是这样:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

它拉得很好。遵循CakePHP 2.10的标准,我将所有相关(作曲家)文件放在app / Vendor文件夹中,并在我的控制器中尝试:

public function index($load = null) {
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    include(APP . 'Vendor' . DS.'autoload.php');

我得到: 语法错误,意外“使用”(T_USE)

任何移动使用的尝试最终都无法正常工作,所以我忽略了它们并尝试让它在没有命名空间的情况下工作。

require_once(APP . 'Vendor' . DS.'autoload.php');
require_once(APP . 'Vendor' . DS.'phpmailer\phpmailer\src\PHPMailer.php');

我知道它通过require_once加载PHP文件,该文件包含PHPMailer类。我收到这个错误:

Error: Class 'PHPMailer' not found  

但是我知道那个班级必须出现在某个地方,因为我装了它。代码如下所示,称之为:

$mail = new PHPMailer(true);
            try {
                //Server settings
                $mail->SMTPDebug = 3;                                 // Enable verbose debug output
                $mail->isSMTP();                                      // Set mailer to use SMTP
                $mail->Host = 'smtp.zoho.com';  // Specify main and backup SMTP servers

等。所以我不确定这个版本的PHPMailer是否拒绝在没有命名空间的情况下工作,CakePHP 2不支持? Google上的所有其他问题似乎对我没有帮助。

1 个答案:

答案 0 :(得分:1)

你将use陈述放在错误的地方;它们需要放在文件的顶部(在任何namespace声明之后),因为它们不是块范围的。 Read the PHP docs

您可以混合使用命名空间和非命名空间的代码,您只需要知道它正在进行中。