【问题标题】:Cannot declare class mPDF, because the name is already in use无法声明类 mPDF,因为该名称已在使用中
【发布时间】:2017-12-13 22:59:47
【问题描述】:

我正在尝试包含一个名为 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;
  }
}

我不断收到错误:

无法声明类 mPDF,因为该名称已在使用中

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

找不到类“App\Http\Controllers\mpdf\mPDF”

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

【问题讨论】:

  • 像这样在你的 mPDF 类中添加命名空间。 namespace App\Http\Controllers\mpdf;
  • 类文件也应该用大写字母命名。如果您将代码部署在运行具有区分大小写文件系统的操作系统的服务器上,这可能会让您头疼
  • 有什么理由不用 composer 来安装它,它会为你自动加载它吗?

标签: php laravel class mpdf


【解决方案1】:

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

namespace App\Http\Controllers\MyPDF;

在您的库类文件 App/Http/Controllers/mpdf/mpdf.php 文件中定义名称空间后,将该类作为

包含到您的控制器中
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;
  }
}

我建议不要将库类创建为控制器或在控制器目录中,在 /app/ 目录中创建库类并提供您自己的命名空间。

实际上命名空间与 JAVA 中的包名相同,您只需要为您的类定义适当的命名空间并包含您的类,如果有相同的类则不会发生任何冲突。相同的类名和不同的命名空间不会造成冲突。

【讨论】:

  • 这行得通,但我必须将 require_once 留在其中,否则我仍然会收到“未找到”错误。
  • 你不需要 require_once 因为 use 语句和命名空间会这样做。
  • 没有它我仍然会得到“找不到类'App\Http\Controllers\MyPDF\mPDF'”我的代码与你的相同(复制粘贴)。
【解决方案2】:

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,因为您已经在命名空间中。

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 2020-06-21
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多