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

时间:2013-12-29 16:47:50

标签: php namespaces laravel ioc-container autoload

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

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吗?

3 个答案:

答案 0 :(得分:1)

除非您想为命名空间中的每个类注册别名,否则无法实现。我最近的Laravel 4项目有IOC Container绑定到我明确声明的命名空间类。

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

答案 1 :(得分:0)

您可以使用

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

让laravel看到所有(新)类并正确加载它们

答案 2 :(得分:0)

app/repository添加到composer.json文件的自动加载部分,例如:

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

然后运行composer dump-autoload