PHP MVC (Laravel),我应该创建另一个类,而不是使用模型,如果我'm不与DB交谈


PHP MVC (Laravel), should I create another class instead of using the model if I'm not talking to the DB

我特别使用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'];