无法声明 class mPDF,因为该名称已被使用

Cannot declare class mPDF, because the name is already in use

我正在尝试包含一个名为 library/plugin 的 mPDF。这是我的代码:

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class HomeController extends Controller {

  public function cert() {
        require_once base_path('App/Http/Controllers/mpdf/mpdf.php');
        $mpdf=new mpdf\mPDF();
        return true;
  }
}

我一直收到错误消息:

Cannot declare class mPDF, because the name is already in use

当我注释掉 require_once 行时,我得到:

Class 'App\Http\Controllers\mpdf\mPDF' not found

mpdf.php 有一个名为 class 的 mPDF。它只有一个 class 具有此名称。这个 class 在我的项目中没有出现。没有其他 class 个同名。

App/Http/Controllers/mpdf/mpdf.php 文件中确保您有命名空间。

namespace App\Http\Controllers\mpdf;

然后将您的代码更改为:

namespace App\Http\Controllers;

class HomeController extends Controller {

  public function cert() {
        $mpdf=new mpdf\mPDF();
        return true;
  }

}

上面代码中的 use App\Http\Controllers 不是必需的,因为您已经在命名空间中。

更新您的名字 space App/Http/Controllers/mpdf/mpdf.php 文件 在文件顶部放一些东西,例如:

namespace App\Http\Controllers\MyPDF;

在您的库 class 文件 App/Http/Controllers/mpdf/mpdf.php 文件中定义名称 space 后,将 class 作为

进入你的控制器
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Http\Controllers\MyPDF\mPDF;
class HomeController extends Controller {

  public function cert() {
        //require_once base_path('App/Http/Controllers/mpdf/mpdf.php');
        $mpdf=new mPDF();
        return true;
  }
}

我建议不要将库 class 创建为控制器或在控制器目录内,在 /app/ 目录中创建库 classes 并提供您自己的名称space。

实际上名称space与JAVA中的包名称相同,您只需要为您的class定义适当的名称space并包含您的class 如果有相同的 class 则没有任何冲突。相同class名称和不同名称space不会引起冲突。