我正在尝试包含名为mPDF的库/插件。这是我的代码:
const commandMap = { room: { join() { ...} }, chat: { add() { ... } }};
// note this is ES6 syntax
let clientCmd = 'room';
let clientFn = 'join';
commandMap[clientCmd][clientFn]();
我一直收到错误:
无法声明类mPDF,因为该名称已在使用中
当我注释掉require_once行时,我得到:
未找到类'App \ Http \ Controllers \ mpdf \ mPDF
mpdf.php有一个名为mPDF的类。它只有一个具有此名称的类。这个类在我的项目中没有出现。没有其他类具有相同的名称。
答案 0 :(得分:3)
更新您的名称空间 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中的包名称相同,您只需要为您的类定义正确的名称空间,并且如果存在相同的类,则包含您的类而不会发生任何冲突。相同的类名和不同的名称空间不会引起冲突。
答案 1 :(得分:1)
在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
不是必需的,因为您已经在命名空间中。