composer的命名空间配置

时间:2017-02-26 10:56:50

标签: php composer-php phpmailer

我正在尝试通过作曲家使用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'

如何配置命名空间以正确使用该类?

提前多多感谢。

1 个答案:

答案 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类。