Interfejs docelowy Laravel 4 nie jest natychmiastowy
Jest to związane z tym pytaniemJak zarejestrować przestrzeń nazw w laravel 4 ale wierzę, że to się udało i przestrzenie nazw działają teraz.
Pojawił się nowy problem. Uważam, że błąd pochodzi z próby wpisania podpowiedzi w konstruktorze kontrolera i ma związek z użyciem przestrzeni nazw i użyciem ioc.
BindingResolutionException: Target [App\Models\Interfaces\PostRepositoryInterface] is not instantiable.
Poniższa metoda działała doskonale, dopóki nie próbowałem wprowadzić przestrzeni nazw. Mogę usunąć wszystkie przestrzenie nazw i umieścić interfejs i repozytoria w tym samym katalogu, ale chciałbym wiedzieć, jak tworzyć przestrzenie nazw z tą metodą używania ioc.
Oto odpowiednie pliki.
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();
//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);
}
}
I widzisz, że kompozytor dump-autoload wykonał swoją pracę.
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',
....
)
Jakieś pomysły, gdzie lub co muszę zmienić, aby działało z nazwami, tak jak bez nich?
Dzięki