【发布时间】:2017-09-27 03:23:48
【问题描述】:
将 laravel 的依赖注入系统与 CRUD 模型等多实例对象一起使用的正确/最佳方式是什么?
PHP 领域某些角落的当前流行说以下代码是“坏的”
function someMethod()
{
/* .. stuff ... */
$object = new \App\SomeModel;
$object->some_prop = 'some value';
$object->save();
/* .. other stuff ... */
}
这很糟糕,因为这个方法现在依赖于新的对象实例化。当前流行的说法是对象应该通过某种依赖注入系统注入,比如 Laravel 的automatic constructor dependency injection。
但是 -- 注入 eloquent 模型似乎有问题
/*...*
public function __construct(\App\SomeModel $object)
{
$this->someModel = $object;
}
function someMethod()
{
/* .. stuff ... */
$object = $this->someModel;
$object->some_prop = 'some value';
$object->save();
/* .. other stuff ... */
}
/*...*/
不清楚 Laravel 的自动构造器依赖注入是每次都创建新的实例,还是注入的对象是单实例对象。它也不能处理你想使用 Eloquent 的静态助手的情况
function someMethod($object_id)
{
//another dependency
\App\SomeModel::find($object_id);
//but this doesn't work
$this->someModel->find($object_id);
}
在 Laravel 应用程序中是否有一种普遍接受的方法来处理这个问题?有人说你应该注入工厂。其他人说存储库。我想知道 Laravel 开发人员的一般做法是什么如果 Laravel 提供了任何可以在这里提供帮助的东西(基础工厂/存储库实现等)
【问题讨论】:
标签: php laravel dependency-injection