【问题标题】:Laravel 5.5 - ReflectionException (-1) Class does not existLaravel 5.5 - ReflectionException (-1) 类不存在
【发布时间】:2020-03-17 22:50:29
【问题描述】:

我正在尝试使用 ReflectionClass 从控制器获取文件名(从应用程序目录)。为了测试我是否可以使用 ReflectionClass,我尝试了以下方式:

在我的 MyController.php 中

public function readContent()
{

    $files = app_path() . DIRECTORY_SEPARATOR. "Drama.php"; 
    // It returns "F:\xampp\htdocs\projectDirectory\app\Drama.php"

    $class = new ReflectionClass($files);
    echo "file name:: ". $class->getFileName();
}

我在这个路径中有一个Drama.php 文件。但是当我为这个方法运行路由时,我得到了以下错误

ReflectionException (-1)
Class F:\xampp\htdocs\projectDirectory\app\Drama.php does not exist

我已经更新了我的composer.json 文件,如下所示:

"autoload": {
        "classmap": [
            "app",
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },

这样,我就可以读取我的app 目录文件。

我还运行了以下命令

  • 作曲家转储自动加载
  • 作曲家更新
  • php 工匠配置:清除
  • php artisan 缓存:清除

但我仍然收到此错误。谁能告诉我如何解决这个问题?

【问题讨论】:

  • ReflectionClass 采用类路径而不是文件路径。 php.net/manual/en/reflectionclass.construct.php 试试new ReflectionClass('\App\Drama')。
  • new ReflectionClass('\App\Drama') 不起作用。但是new ReflectionClass('\App')。但它表示Illuminate\Support\Facades\App 目录。不是模型、控制器等所在的app 目录。如何读取app 目录的文件? @布莱恩
  • 您的 Drama.php 文件可能存在命名空间问题。这就是为什么它不起作用。文件的开头应该是<?php namespace App;
  • 是的,存在命名空间问题。谢谢 :) @Bryan
  • 不客气。添加了我的评论作为答案。随意接受。

标签: php laravel laravel-5 laravel-artisan


【解决方案1】:

您的问题是ReflectionClass 将类路径作为constructor argument,而不是文件路径。试试new ReflectionClass('\App\Drama')。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2015-12-05
    • 2014-01-24
    • 2022-10-25
    • 1970-01-01
    相关资源
    最近更新 更多