我特别使用Laravel和Eloquent (ORM),但我相信这是一个通用的MVC问题…
我有一个视图和几个控制器方法接收一个雄辩的对象,并可以通过$foo->bar访问属性(这也是一个模型对象)。
我想重新使用这些相同的视图'控制器方法与我手动创建的一些对象。这些对象不会被持久化到DB,但它们具有与Eloquent对象相同的设计和结构(它们本质上是检索到的数据的一个经过严格过滤'修改的子集,我无法从Eloquent语句中重新创建)。
假设我有一个Eloquent使用的Foo.php模型。对于手动创建的Foo对象,我应该使用Foo.php 模型还是创建另一个Foo.php 类?
并且具体到Laravel,这应该住在哪里,我如何避免对我使用的哪个Foo感到困惑?
换句话说。要重用接收和Eloquent (ORM)对象的代码(在视图'控制器中),我应该为未从DB(手动创建)检索的对象创建一个新类,还是应该使用现有模型?
这实际上取决于项目的大小以及您希望将Eloquent与视图解耦的程度。
如果这是一个巨大的项目,也许在将来你会删除eloquent,那么创建一个类,它将作为简单的数据对象传递给视图。
如果你认为eloquent会留在这里,那么只需手动创建eloquent对象并将其传递给视图。
下面是一些选项:
选项1:手动创建eloquent对象(不持久化)
$eloquentForView = new Whatever();
$eloquentForView->username = "just for view";
选项2:为你的视图创建一个对象
class WhateverDataView {
public $username;
}
选项3:简单地传递一个数组
from eloquent object:
$eloquentObj->toArray();
简单代码
$dataForView = ['username'=>'whatever username'];