Php Laravels ioc容器可以使用自动加载的名称空间吗?

Php Laravels ioc容器可以使用自动加载的名称空间吗?,php,namespaces,laravel,ioc-container,autoload,Php,Namespaces,Laravel,Ioc Container,Autoload,假设我在app/repository/MyClass.php的repository命名空间中有一个类MyClass: namespace Repository; class MyClass { ... } 我可以使用ioc容器绑定它: App::bind('SomeClass', 'Repository\MyClass'); 模型依赖项也是如此: SomeClass extends Eloquent{ public function dependency() {

假设我在
app/repository/MyClass.php的
repository
命名空间中有一个类
MyClass

namespace Repository;

class MyClass { ... }
我可以使用ioc容器绑定它:

App::bind('SomeClass', 'Repository\MyClass');
模型依赖项也是如此:

SomeClass extends Eloquent{

    public function dependency()
    {
         return $this->hasOne('Models\Dependency');
    }        

}
一种解决方案是在
app.php
中创建别名,但必须为我想要自动命名的每个文件创建别名:

'MyClass' => 'Repository\MyClass'
是否可以让ioc容器在不使用别名的情况下识别类的正确名称空间?我们可以用Composer来做这个吗?

你可以用

cd /path/to/laravel/
php composer dump-autoload

要让laravel查看所有(新)类并正确加载它们,请将
app/repository
添加到composer.json文件的autoload部分,例如:

"autoload": {
    "classmap": [
         "app/commands",
         "app/controllers",
         "app/models",
         "app/database/migrations",
         "app/database/seeds",
         "app/tests/TestCase.php",
         "app/repository"
    ]
},

然后运行
composer dump autoload

除非您想为名称空间中的每个类注册别名,否则这是不可能的。我最近的Laravel4项目有IOC容器绑定到我显式声明的命名空间类


App::bind('Foo\Bar\Repositories\UserRepositoryInterface','Foo\Bar\Repositories\DbUserRepository');

也没有运气。我认为这只是自动加载文件,因此可以避免使用require()。它不加载名称空间。我知道这有点乏味,但我发现,通过多次编辑,升华文本真的让这变得轻而易举。