Class 在 Laravel 中自动加载后未找到
Class not found after auto loading in Laravel
我在 Laravel 5.4
中与 PHP Namespaces
和 Auto loading
作斗争。我实际上决定将我需要使用的模型放在一个明确的命名文件夹中 app/Models
:
php artisan make:model Models/Customer
我已将 Customer 模型的命名空间设置为 namespace Models;
然后,我创建了一个路由如下:
Route::get('customer', function () {
$customer = \App\Models\Cutomer::find(1);
echo $customer;
});
为了进行自动加载工作,我打开了位于 Laravel
项目根文件夹中的 composer.json
文件,并使 autoload
如下所示:
"autoload": {
"classmap": [
"database",
"app/Models"
],
"psr-4": {
"App\": "app/",
"App\Models\": "App/Models"
}
},
完成所有这些之后,我检查了我的作曲家是否是更新版本并且 运行 dump-autoload
:
composer self-update
composer dump-autoload -o
另外值得注意的是vendor/composer/autoload_classmap.php
的内容:
'App\Models\Customer' => $baseDir . '/app/Models/Customer.php',
'App\Models\Test\Test' => $baseDir . '/app/Models/Test.php',
我的问题是,每当我执行 url: http://127.0.0.1:8000/customer
时,我都会遇到以下错误输出:
(1/1) FatalThrowableError
Class 'App\Models\Cutomer' not found
能否请您帮助我了解我的工作哪里不正确,以及如何解决?非常感谢您。
模型中的命名空间应为 namespace App\Model;
(因此将 class 称为 \App\Models\Cutomer
)
当您使用 php artisan make:model Models/Customer
时,它应该已经正确设置了命名空间。
此外,您无需编辑 composer.json
即可执行此操作。删除您为自动加载对 composer.json
文件所做的添加,然后从命令行删除 运行 composer dumpautoload
。
希望对您有所帮助!
首先,您的 PSR-4 设置有误。
"App\Models\": "App/Models"
这没有映射到有效的目录。其次,更重要的是,无需自动加载已声明的嵌套命名空间。通过自动加载 App
你将已经自动加载任何嵌套的命名空间,只要它们符合 PSR-4 标准即命名空间作为目录名和文件名作为 class 名称。
Composer 设置只需如下:
"psr-4": {
"App\": "app/"
}
我在 Laravel 5.4
中与 PHP Namespaces
和 Auto loading
作斗争。我实际上决定将我需要使用的模型放在一个明确的命名文件夹中 app/Models
:
php artisan make:model Models/Customer
我已将 Customer 模型的命名空间设置为 namespace Models;
然后,我创建了一个路由如下:
Route::get('customer', function () {
$customer = \App\Models\Cutomer::find(1);
echo $customer;
});
为了进行自动加载工作,我打开了位于 Laravel
项目根文件夹中的 composer.json
文件,并使 autoload
如下所示:
"autoload": {
"classmap": [
"database",
"app/Models"
],
"psr-4": {
"App\": "app/",
"App\Models\": "App/Models"
}
},
完成所有这些之后,我检查了我的作曲家是否是更新版本并且 运行 dump-autoload
:
composer self-update
composer dump-autoload -o
另外值得注意的是vendor/composer/autoload_classmap.php
的内容:
'App\Models\Customer' => $baseDir . '/app/Models/Customer.php',
'App\Models\Test\Test' => $baseDir . '/app/Models/Test.php',
我的问题是,每当我执行 url: http://127.0.0.1:8000/customer
时,我都会遇到以下错误输出:
(1/1) FatalThrowableError
Class 'App\Models\Cutomer' not found
能否请您帮助我了解我的工作哪里不正确,以及如何解决?非常感谢您。
模型中的命名空间应为 namespace App\Model;
(因此将 class 称为 \App\Models\Cutomer
)
当您使用 php artisan make:model Models/Customer
时,它应该已经正确设置了命名空间。
此外,您无需编辑 composer.json
即可执行此操作。删除您为自动加载对 composer.json
文件所做的添加,然后从命令行删除 运行 composer dumpautoload
。
希望对您有所帮助!
首先,您的 PSR-4 设置有误。
"App\Models\": "App/Models"
这没有映射到有效的目录。其次,更重要的是,无需自动加载已声明的嵌套命名空间。通过自动加载 App
你将已经自动加载任何嵌套的命名空间,只要它们符合 PSR-4 标准即命名空间作为目录名和文件名作为 class 名称。
Composer 设置只需如下:
"psr-4": {
"App\": "app/"
}