我正在使用Laravel 5.5。我在我的工作区中的App文件夹中添加了自定义目录。所以,文件夹结构是:
Inside App \ Bishwa \ Transformers有两个php文件:
这些文件如下所示:
Transformer.php
<?php
namespace Bishwa;
abstract class Transformer {
public function transformCollection(array $items){
return array_map([$this, 'transform'], $items);
}
public abstract function transform($item);
}
LessonTransformer.php
<?php
namespace Bishwa;
class LessonTransformer extends Transformer {
public function transform($lesson){
return [
'title' => $lesson['title'],
'body' => $lesson['body'],
'active' => (boolean)$lesson['some_bool']
];
}
}
然后在LessonsController.php里面我有以下内容:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use App\Lesson;
use Bishwa\LessonTransformer;
class LessonsController extends Controller
{
protected $lessonTransformer;
function __construct(LessonTransformer $lessonTransformer){
dd('ok');
}
在运行控制器的操作时,它给了我一条错误消息:
Reflection Exception : Class Bishwa\LessonTransformer does not exist
我已经尝试composer dump-autoload
,重新启动服务器,但没有一个帮助。我在Namespacing或者什么??
答案 0 :(得分:-1)
将自定义目录中文件的命名空间更改为App\Bishwa
。
答案 1 :(得分:-1)
非常感谢杰罗德夫和杰克。既然他们都写了,我决定自己写一个解决这个问题的综合解决方案。
第一个解决方案:
如果是自定义命名空间和自定义类,我必须在Composer.json
文件中包含以下部分中classname的路径:
"autoload": {
"classmap": [
"database/seeds",
"database/factories",
"app/Bishwa/Transformers"
],
"psr-4": {
"App\\": "app/"
}
第二个解决方案:
将文件的NameSpace更改为自定义目录App\Bishwa
。
transformer.php和LessonTransformer.php的命名空间现在变为:
namespace App\Bishwa\Transformers;
在LessonsController中使用时:
use App\Bishwa\Transformers\LessonTransformer;
再一次,非常感谢杰罗德夫和杰克。这是我的愚蠢错误,我无法解决这个问题。