自定义 Class 未在控制器中加载
Custom Class not loading in Controller
我有一个名为 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: "->"},…]
有人可以帮我解决这个问题吗?
错误被触发是因为你的代码没有使用正确的class,这就是它正在寻找的:
App\Http\Controllers\InvoiceDataSource
这只是在您的控制器文件夹中查找文件 InvoiceDataSource.php
。
要更改 class 它正在寻找使用 use
。
这是因为您在控制器命名空间中,当您命名一个没有 use
属性的 class 时,它默认为控制器 (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();
}
// ...
}
更新:
如评论中所述,当包含具有不同命名空间的 class 时,您也有不同的选择:
1) 使用整个 class 命名空间
public function getDataSource($id,Request $request){
return App\Core\Forms\Invoice\InvoiceDataSource::getAllCustomers();
}
2) 或者如果你有多个 classes 在不同的命名空间下具有相同的名称你可以使用 as:
use App\Core\Forms\Invoice\InvoiceDataSource as DataSource
use App\Core\Mailer\Invoice\InvoiceDataSource as DataSourceMailer
// ... etc
我有一个名为 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: "->"},…]
有人可以帮我解决这个问题吗?
错误被触发是因为你的代码没有使用正确的class,这就是它正在寻找的:
App\Http\Controllers\InvoiceDataSource
这只是在您的控制器文件夹中查找文件 InvoiceDataSource.php
。
要更改 class 它正在寻找使用 use
。
这是因为您在控制器命名空间中,当您命名一个没有 use
属性的 class 时,它默认为控制器 (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();
}
// ...
}
更新:
如评论中所述,当包含具有不同命名空间的 class 时,您也有不同的选择:
1) 使用整个 class 命名空间
public function getDataSource($id,Request $request){
return App\Core\Forms\Invoice\InvoiceDataSource::getAllCustomers();
}
2) 或者如果你有多个 classes 在不同的命名空间下具有相同的名称你可以使用 as:
use App\Core\Forms\Invoice\InvoiceDataSource as DataSource
use App\Core\Mailer\Invoice\InvoiceDataSource as DataSourceMailer
// ... etc