我有一个控制器在我的app / helpers目录中调用一个帮助器类,然后帮助器调用它的命名空间中的另一个类,但它找不到该类。
所以这是我的控制器:
<?php
namespace App\Controllers\Dash;
use \App\Models\SalesFlyer;
use \App\Helpers\MyPdf;
class FlyerBuilderController extends BaseController {
public function getPdf($flyerId = null) {
$flyer = new SalesFlyer();
$flyerData = $flyer->getSalesFlyerName($flyerId);
$flyerPath = public_path().'/assets/media/flyers/'.Session::get('userid').'/'.$flyerData->name.'-'.$flyerId.'.html';
return MyPdf::downloadPdf($flyerPath, $flyerData->name);
}
}
它完全可以捕获MyPdf类。这是MyPdf类:
<?php
namespace App\Helpers;
class MyPdf {
public static function downloadPdf($filePath, $filename) {
$client = new PdfCrowd("anthonythomas", "1ebd0d6e3ec1dfa83a6c5f3dd32906f0");
// other code here
}
}
PdfCrowd类位于App \ Helpers命名空间内,如下所示:
<?php
namespace App\Helpers;
//
// Pdfcrowd API client.
//
class PdfCrowd { }
Class&#39; App \ Helpers \ PdfCrowd&#39;找不到
这是我的start / global.php文件:
<?php
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/controllers/dash',
app_path().'/controllers/dash/product',
app_path().'/models/Product',
app_path().'/models',
app_path().'/database/seeds',
app_path().'/helpers',
));
然后这是我的作曲家:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/controllers/dash",
"app/controllers/dash/product",
"app/models",
"app/models/Product",
"app/helpers",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
}
知道为什么我会收到这个错误吗?..
答案 0 :(得分:2)
一切看起来都不错,但你也要记得
composer dump-autoload
每次创建新课程。另外,检查文件
vendor/composer/autoload_classmap.php
你必须在那里看到你的助手课程。
但是如果您使用PSR-4,则可以使用相同的命名空间,而不会再次执行composer dump-autoload
:
"autoload": {
"psr-4": {
"App\\Helpers\\": "app/helpers"
}
},
请记住从类别地图中删除"app/helpers",
。
答案 1 :(得分:0)
对于共享托管服务提供商来说没问题...即使你用psr-4添加一个新的命名空间和更新作曲家,你也必须用当地计算机上的当前计算机替换供应商目录,以便它实际通过!在我意识到每次在本地发出composer dump-autoload时我必须更换供应商目录时,这节省了我很多时间。