【问题标题】:Error in external php class include in Laravel 5.3?Laravel 5.3 中包含的外部 php 类中的错误?
【发布时间】:2017-05-11 01:58:20
【问题描述】:

我有一个名为CsvClass.php 的php 库类文件。我将此文件放在app/Libraries/CsvClass.php 的位置。我见过Some url,这类问题有解决方案。所以按照我在控制器中添加namespace App\Libraries;use App\Libraries\CsvClass; 的方向。但是为此我在加载控制器时遇到了这个错误。 FatalErrorException in ImportController.php line 17:Class 'App\Libraries\Controller' not found.

所以我评论app/Libraries/CsvClass.php 并运行,以便控制器正在加载。控制器的顶部现在看起来像这样,

namespace App\Http\Controllers;
//namespace App\Libraries;

use App\Libraries\CsvClass;
use Illuminate\Http\Request;
use App\Http\Requests;
use Illuminate\Http\RedirectResponse;
use Clusterpoint\Client;
use DateTime;
use Session;
use Excel;

但是当我尝试使用该类并且出现错误时,

FatalErrorException in ImportController.php line 120: Class 'App\Http\Controllers\parseCSV' not found

我尝试使用这个类,

$csv = new parseCSV();
$csv->auto($path);
$full_data=$csv->data;

此处$path 包含 csv 文件的路径。此函数在单独的 php 文件中运行。但不是在 Laravel 中。我正在使用 5.3 版。并遵循如何在 laravel 中导入外部文件的规则。但不明白为什么会出现错误。请帮帮我。

我正在使用 CSV 库来读取 csv 文件。图书馆是here

【问题讨论】:

  • 你能出示你的文件CsvClass.php吗?
  • 您可以从github.com/parsecsv/parsecsv-for-php链接下载文件。已经给出了问题中的链接。
  • 确保您已为 CsvClass.php 设置命名空间,以便在您的 use 语句中使用 App\Libraries\CsvClass。
  • 这是同一个库文件。我只将名称更改为 CsvClass.php。原始文件名为 parsecsv.lib.php。
  • @andrew:我实际上不理解这件事。请在这里帮助我。

标签: php csv laravel-5.3


【解决方案1】:

使用没有命名空间和不同文件名的类的最佳方法是使用 Composer 自动加载。

1) 在 classmap 中注册您的课程。

"autoload": {
        "classmap": [
            "database",
            "app/Libraries/CsvClass.php"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },

2) 运行composer dump-autoload

现在您可以在任何地方访问您的课程,而无需提供完整路径。

$csv = new parseCSV();
$csv->auto($path);
$full_data=$csv->data;

【讨论】:

  • 您确定 composer dump-autoload 运行时没有任何警告或错误消息吗?因为我在发布之前自己尝试过,它对我有用。
  • 您是否使用 php artisan serve 对其进行测试?如果是,请关闭它并重新运行。在类加载方面很奇怪。
猜你喜欢
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
相关资源
最近更新 更多