在nWidart安装laravel-modules之后,Laravel中第1行的eval()代码中找不到类“Modules \ Media”

时间:2017-05-21 08:10:29

标签: class laravel-5 module

我正在为项目使用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配置中遗漏了什么?我不知道。

1 个答案:

答案 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",
   }