This is related to this question. How to register a namespace in laravel 4 , but I believe that I have developed this, and namespaces are working now.
There was a new problem that I encountered. I believe that the error comes from trying to type a hint in the controller constructor and is related to using namespaces and using ioc.
BindingResolutionException: Target [App\Models\Interfaces\PostRepositoryInterface] is not instantiable.
The method below worked fine until I tried to enter namespaces. I can delete all namespaces and put the interface and repositories in the same directory, but would like to know how to make namespaces work with this method of using ioc.
Here are the relevant files.
routes.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();
And you can see that the composer dump-autoload did the job.
composer / 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', .... )
Any ideas where or what I need to change to make this work with names, how does this happen without them?
thanks