我正在为项目使用nWidart的laravel-modules。这个想法很棒,但我不喜欢让模块目录以大写字母(模块)开头。
我决定更改配置文件中的目录名:
/config/modules.php
我将名称空间保留为模块,但我更改了路径:
return [
'namespace' => 'Modules',
'paths' => [
'modules' => base_path('modules'), // Used to be ('Modules')
]
];
我将它添加到composer.json文件中:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Modules\\": "modules/"
}
},
现在,我创建了一个名为Media的模块:
php artisan module:make Media
还创建了一个媒体模型:
php artisan module:make-model Media media
我的模型是这样的:
<?php
namespace Modules\Media\Entities;
use Illuminate\Database\Eloquent\Model;
class Media extends Model{
//
public function categories(){
return $this->belongsToMany( Category::class, 'category_media' );
}
}
一切正常,但是当我去修补时
php artisan tinker
我尝试从数据库中加载一个Object(存在):
$file = \Modules\Media\Entities::find( 1 );
或
$file = Modules\Media\Entities::find( 1 );
或
$file = modules\Media\Entities::find( 1 );
或
$file = \modules\Media\Entities::find( 1 );
我收到此错误:
PHP Fatal error: Class 'Modules\Media\Entities' not found in eval()'d code on line 1
关于可能导致问题的任何想法?它是目录名称的变化吗?我在composer.json配置中遗漏了什么?我不知道。
答案 0 :(得分:1)
在阅读了我自己的代码之后,我发现我没有引用Class,只引用了命名空间。调用Media类的正确方法是:
$file = \Modules\Media\Entities\Media::find( 1 );
(请注意,这次我以\ Media结束)
当然,结果是预期的:
=> Modules\Media\Entities\Media {#857
id: 1,
filename: "my_file.jpg",
properties: "[]",
mime: "image\jpg",
extension: "jpg",
created_at: "2017-05-21 04:37:28",
updated_at: "2017-05-21 04:37:28",
published: 0,
published_at: "2017-05-20 23:37:28",
}