这与这个问题有关How to register a namespace in laravel 4但我相信我已经解决了,并且命名空间现在正在工作。
我遇到了一个新问题。我相信错误来自尝试在控制器构造函数中键入提示,并且与使用命名空间和使用 ioc 有关。
BindingResolutionException: Target [App\Models\Interfaces\PostRepositoryInterface] is not instantiable.
在我尝试引入命名空间之前,下面的方法运行良好。我可以删除所有命名空间并将接口和存储库放在同一目录中,但想知道如何使命名空间与这种使用 ioc 的方法一起工作。
以下是相关文件。
路由.php
Route::resource('posts', 'PostsController');
PostController.php
<?php
use App\Models\Interfaces\PostRepositoryInterface;
class PostsController extends BaseController {
public function __construct( PostRepositoryInterface $posts )
{
$this->posts = $posts;
}
}
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();
//after above edit it works to this point
//error: App\Models\Repositories\Post not found
//because Post is not in this namespace
}
public function find($id)
{
return Post::find($id);
}
public function store($data)
{
return Post::save($data);
}
}
你可以看到 composer dump-autoload 完成了它的工作。
作曲家/autoload_classmap.php
return array(
'App\\Models\\Interfaces\\PostRepositoryInterface' => $baseDir . '/app/models/interfaces/PostRepositoryInterface.php',
'App\\Models\\Repositories\\EloquentPostRepository' => $baseDir . '/app/models/repositories/EloquentPostRepository.php',
....
)
任何想法我需要更改哪些地方或哪些内容才能使其与命名空间一起工作,就像没有它们一样?
谢谢