我正在尝试通过作曲家使用PHPMailer。
我正在为我的应用程序使用命名空间和PSR-4自动加载
我的文件组织就像这样
-bin
-controllers
- Controller.php (namespace bin\controllers)
-vendor
-phpmailer
-phpmailer
-src
PHPMailer.php (namespace HPMailer\PHPMailer)
在composer.json中,我写了这个
"autoload": {
"psr-4": {"bin\\vendor\\phpmailer\\": "bin/vendor/phpmailer/phpmailer/src/PHPMailer.php"}
}
但是当我使用
时<?php
namespace bin\controllers;
use bin\vendor\phpmailer\PHPMailer;
abstract class Controller {
public function __construct()
{
$mail = new PHPMailer();
}
}
我遇到了致命的错误:
require_once():无法打开所需的'/ Users / thomas / Library / Mobile 文件/ COM〜苹果〜CloudDocs / saveProject / bin中/../斌/供应商/ PHPMailer的/ PHPMailer.php'
如何配置命名空间以正确使用该类?
提前多多感谢。
答案 0 :(得分:0)
你正在混淆路径和namespaces;在大多数情况下,他们是独立的,但PSR-4和朋友帮助将一个映射到另一个。
PHPMailer仅支持版本6.0的命名空间,但尚未发布,但您当然可以使用预发布版本。
use bin\vendor\phpmailer\PHPMailer;
应该是:
use PHPMailer\PHPMailer\PHPMailer;
use
关键字用于将实体从其他命名空间导入当前的关键字 - 请注意,这在概念上与包含include
/ require
的文件不同。
看起来你也在自己的应用程序中混合名称空间 - 通常你会使用基于<vendorname>\<projectname>
模式的命名空间,所以你的示例控制器可能是:
namespace MyCompany\MyProject;
class MyMailController...
或者您可以在自己的项目中使用多个名称空间,如下所示:
namespace MyCompany\MyProject\Controllers;
class Mail...
将定义MyCompany\MyProject\Controllers\Mail
类。