我在Laravel 4中创建了一个工作台包,它是名称间隔的,有两个目录:模型和上下文。不知怎的,Laravel正在我的 Models 目录中加载我的模型(我在那里有一个名为User
的模型)但是,它不知道我在上下文中的类< / strong>目录。
我希望能够在我的app控制器中使用我的上下文类而不指定整个命名空间,所以我想我会将它们添加到Laravel的IoC容器中。但是,我似乎需要为每个要添加到容器的类创建一个façade类。如果我有几十个上下文类,这是不可取的,因为它也意味着创建相同数量的外观类。
Laravel有没有办法将类批量添加到其IoC容器中?
答案 0 :(得分:0)
如果你想为你的课程使用一个术语外墙(例如MyModel::someAction()
),那么你必须创建你的外墙。但我建议不要为这么多课程这样做。
如果找不到上下文文件夹中的类,则应检查自动加载条目下的composer.json
文件或执行composer dump-autoload -o
。
我只是修改使用它们的类的构造函数中的类,因此最终使用$this->myService->someAction()
。
答案 1 :(得分:0)
这应该回答Laravel 4和5。
首先,您需要使用bind方法Illuminate\Foundation\Application
类,该类用于在服务容器中注册绑定。在Laravel文档中,您将找到大量示例,如何执行此操作,但仅适用于单个绑定。
如果您查看绑定方法here或仅定义here的实现,您会注意到此方法接受string|array
。这意味着您可以提供多个绑定作为数组,并使用其完全限定的类名称在容器中注册所有绑定。像这样:
$this->app->bind(['\App\Acme\Service1', '\App\Acme\Service2', '\App\Acme\Service3', ...]
考虑到这一点,您可以轻松地使用反射在一个命名空间(目录)中获取类,将它们放在数组中并使用上面的方法来注册它们。
答案 2 :(得分:0)
稍后重新审视这个问题,我认为适当的解决方案是使用我的包的 composer.json 文件自动加载类,然后在控制器和其他类中使用它的FQN导入类: / p>
<?php
use Vendor\Package\Contexts\ContextClass;
class Laravel4Controller extends BaseController {
protected $context;
public function __construct(ContextClass $context) {
$this->context = $context;
}
}