2017-05-21 3 views
1

プロジェクトにnWidartのlaravel-modulesを使用しています。アイデアは素晴らしいですが、私は大文字で始まるmodulesディレクトリを持つのが好きではありません(モジュール)。laravel-modulesをnWidartでインストールした後、eval()の 'Modules Media'クラスがLaravelの1行目に見つかりません

私は、構成ファイル内のディレクトリ名を変更することを決めた:

/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 

をいじくり回しますそして、私はデータベースからオブジェクト(存在する)を読み込もうとします:

$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

私自身のコードを読んだ後、私はクラスを参照していないことを知りましたが、名前空間だけを参照しました。メディアクラスを呼び出すための正しい方法は:

$file = \Modules\Media\Entities\Media::find(1); 

(この時間は、私は、\メディアで終わることに注意してください)

そしてもちろん、結果が予想されます。

=> 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", 
    } 
関連する問題