自定义类未加载到Controller中

时间:2018-12-09 18:14:03

标签: php laravel-5 autoloader

我有一个名为InvoiceDataSource.php的文件,其路径为app\Core\Forms\Invoice\InvoiceDataSource.php,并且该文件包含此文件。

<?php

namespace App\Core\Forms\Invoice;

class InvoiceDataSource {

public function getAllCustomers(){

    return Customer::selectRaw('id as `value`,'.
                     'name as `label`')
                    ->get()
                    ->toArray();
}

}

?>

我也将其包含在composer.json文件中,

"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories",
        "app/Core/Forms/Invoice/InvoiceDataSource.php" 
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

它也已添加到autoload_classmap.php文件中的自动加载器中。

现在,当我尝试在像这样的控制器中访问此

//
public function getDataSource($id,Request $request){

    return InvoiceDataSource::getAllCustomers();

}

但是由于某种原因,错误阅读了此内容,

{message: "Class 'App\Http\Controllers\InvoiceDataSource' not found",…}
exception: "Symfony\Component\Debug\Exception\FatalThrowableError"
file: "/home/zrehan/projects/erp/app/Http/Controllers/FormController.php"
line: 88
message: "Class 'App\Http\Controllers\InvoiceDataSource' not found"
trace: [{function: "getDataSource", class: "App\Http\Controllers\FormController", type: "->"},…]

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

由于您的代码未使用正确的类而触发了错误,这就是它要查找的内容:

App\Http\Controllers\InvoiceDataSource

仅在控制器文件夹中查找文件InvoiceDataSource.php

要更改其要查找的类,请使用use

这是因为由于您在控制器名称空间中,所以在命名没有use属性的类时,它默认为控制器(App\Http\Controllers)名称空间。

<?php

namespace App\Http\Controllers;

// ...

use App\Core\Forms\Invoice\InvoiceDataSource;

// ...

class SomeController expands Controller {
  // ...

  public function getDataSource($id,Request $request){

      return InvoiceDataSource::getAllCustomers();

  }

// ...

}

更新:

如注释中所述,在包含具有不同名称空间的类时,您也可以使用其他选择:

1)使用整个类的名称空间

  public function getDataSource($id,Request $request){

      return App\Core\Forms\Invoice\InvoiceDataSource::getAllCustomers();

  }

2)或者,如果在不同的命名空间下有多个具有相同名称的类,则可以用作:

use App\Core\Forms\Invoice\InvoiceDataSource as DataSource
use App\Core\Mailer\Invoice\InvoiceDataSource as DataSourceMailer
// ... etc