【问题标题】:Reflection Exception : Class ClassName doesn't exist反射异常:类 ClassName 不存在
【发布时间】:2018-04-22 05:20:32
【问题描述】:

我正在使用 Laravel 5.5。我在工作区的 App 文件夹中添加了一个自定义目录。所以,文件夹结构是:

App\Bishwa\Transformers里面有两个PHP文件:

  1. Transformer.php
  2. LessonTransformer.php

这些文件如下所示:

  1. Transformer.php

    <?php
    
    namespace Bishwa;
    
    abstract class Transformer {
    
        public function transformCollection(array $items){
    
            return array_map([$this, 'transform'], $items);
    
        }
    
        public abstract function transform($item);
    }
    
  2. 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,再次重新启动服务器,但都没有帮助。我在命名空间时做错了吗?

【问题讨论】:

  • 您是否已将命名空间添加到 composer.json 中的自动加载器中?
  • 谢谢你.. 这是我的愚蠢错误:D

标签: php laravel namespaces


【解决方案1】:

感谢 Jerodev 和 Jack。因为,他们两个都是写的,所以我决定自己写一个这个问题的组合解决方案。

第一个解决方案:

如果是自定义命名空间和自定义类,我必须在 Composer.json 文件的以下部分中包含类名的路径:

"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories",
             "app/Bishwa/Transformers"


        ],
        "psr-4": {
            "App\\": "app/"
        }

第二个解决方案:

将我的文件的命名空间更改为自定义目录App\Bishwa

transformer.php 和 LessonTransformer.php 的命名空间现在变为:

namespace App\Bishwa\Transformers;

在 LessonsController 中使用时:

use App\Bishwa\Transformers\LessonTransformer;

再次感谢 Jerodev 和 Jack。这是我的愚蠢错误,我无法弄清楚。

【讨论】:

    【解决方案2】:

    将自定义目录中文件的命名空间更改为App\Bishwa

    【讨论】:

      猜你喜欢
      • 2016-12-07
      • 2017-08-16
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2020-01-03
      • 2019-05-11
      • 1970-01-01
      • 2014-11-20
      相关资源
      最近更新 更多