2

問題: PostController.php の 4 行目、または名前空間をいじくり回すクラスの PostRepostioryInterface が見つかりません クラス App\Models\Interfaces\PostRepositoryInterface が見つかりません

質問: laravel 4 で名前空間を登録する方法は? L4 にこの名前空間のクラス/インターフェースを認識させるにはどうすればよいですか?

Larave 3 には、ClassLoader に $namespaces 静的オブジェクトがあり、名前空間を追加することができました

Autoloader::namespaces(array(
  'App\Models\Interfaces' => path('app').'models/interfaces',
));

laravel 3にその権利があるかどうかはわかりませんが、いずれにしても、Laravel 4にはAutoLoaderが存在せず、ClassLoaderは存在しますが、Laravel 4のClassLoaderにはメソッド名前空間が存在しません.

私はこれを見てきましたが、どうにかして名前空間を登録しないとうまくいかないようです。 Laravel 4 で名前空間を使用する

構造例:

app/models/interfaces
    PostRepostitoryInterface.php
app/models/repositories
    EloquentPostRepository.php


namespaces:
    App\Models\Repositories;
    App\Models\Interfaces;

ファイル:

PostRepositoryInterface.php

<?php namespace App\Models\Interfaces;
interface PostRepositoryInterface {
    public function all();
    public function find($id);
    public function store($data);
}

EloquentPostRepository.php

<?php namespace App\Models\Repositories;
use App\Models\Interfaces\PostRepositoryInterface;
class EloquentPostRepository implements PostRepositoryInterface {

    public function all()
    {
        return Post::all();
    }

    public function find($id)
    {
        return Post::find($id);
    }

    public function store($data)
    {
        return Post::save($data);
    }
}

PostController.php

<?php
use App\Models\Interfaces\PostRepositoryInterface;
class PostsController extends BaseController {

    public function __construct( PostRepositoryInterface $posts )
    {
        $this->posts = $posts; 
    }

ありがとう

4

2 に答える 2

7

あなたはおそらくするのを忘れていcomposer dump-autoloadました。これにより、Laravel がオートロードするクラスのリストが更新されます。

詳しくはcomposer documentationを参照してください。

于 2013-03-05T17:34:32.237 に答える
1

laravel irc チャンネルで、名前空間はどこにも登録しなくても L4 で機能するはずであることがわかりました。これは、composer dump-autoload がそれらを composer/autoload ファイルに追加するためです。それは問題ではありませんでした。

問題は明らかにタイプミスであることが判明しました(上記のコードでは見つかりませんが、クラス名と名前空間をコピー/貼り付けするすべての行を通過した後、何かが変更されました)、実際のコードでは「 EloquentPostRepository.php の use' ステートメント

use App\Models\Interfaces\PostRepositoryInterface;

名前空間付きインターフェイスを ioc およびコントローラー コンストラクター (ターゲット インターフェイス App\Models\Interfaces\PostRepositoryInterface はインスタンス化できません) で使用しようとして別の壁にぶつかりましたが、それは別の質問であると思います。

于 2013-03-06T00:01:01.337 に答える