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()。它不加载名称空间。我知道这有点乏味,但我发现,通过多次编辑,升华文本真的让这变得轻而易举。