问题:在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,而在Laravel 4中存在ClassLoader,但是在Laravel 4中ClassLoader中不存在方法名称空间。
我已经研究过这一点,但如果不以某种方式注册名称空间,它似乎无法工作。Using namespaces in 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;
}谢谢
发布于 2013-03-06 08:01:01
在laravel irc频道上,我发现名称空间应该可以在L4中工作,而不需要在任何地方注册它们。这是因为composer dump-autoload会将它们添加到composer/autoload文件中。所以这不是一个问题。
这个问题显然是一个打字错误(我在上面的代码中找不到它,但在复制/粘贴每一行的类名和命名空间后,有些地方发生了变化),而且不知何故,在我的实际代码中,我遗漏了EloquentPostRepository.php的'use‘语句
use App\Models\Interfaces\PostRepositoryInterface;现在,我遇到了另一个障碍,试图通过ioc和控制器构造函数使用命名空间接口(目标接口App\Models\Interfaces\PostRepositoryInterface是不可实例化的),但我猜这应该是另一个问题。
发布于 2013-03-06 01:34:32
你可能忘了做composer dump-autoload。这将更新类Laravel自动加载的列表。
你可以在composer documentation上阅读更多。
https://stackoverflow.com/questions/15204103
复制相似问题