我有一个名为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: "->"},…]
有人可以帮我吗?
答案 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