Php Laravel应用程序结构:什么时候应该使用模型,什么时候应该使用助手类?

Php Laravel应用程序结构:什么时候应该使用模型,什么时候应该使用助手类?,php,laravel,Php,Laravel,在过去的一周里,我一直在学习MVC,特别是LaravelPHP框架。我已经注册了Laracasts,我对MVC模式的工作原理有了基本的了解,但有一件事没有向我解释,那就是何时使用模型 每次我演示模型是什么时,它都扩展了elount,并链接到数据库表。Jeffrey Way特别指出不要将“模型”与“表”混为一谈,因此我假设您可以创建和使用未链接到数据库表的模型,但我不确定何时这样做 此外,我还不能完全确定这一点:我什么时候应该使用模型,什么时候应该使用助手类/库?没有详细介绍模型,只是主要讨论了雄

在过去的一周里,我一直在学习MVC,特别是LaravelPHP框架。我已经注册了Laracasts,我对MVC模式的工作原理有了基本的了解,但有一件事没有向我解释,那就是何时使用模型

每次我演示模型是什么时,它都扩展了
elount
,并链接到数据库表。Jeffrey Way特别指出不要将“模型”与“表”混为一谈,因此我假设您可以创建和使用未链接到数据库表的模型,但我不确定何时这样做

此外,我还不能完全确定这一点:我什么时候应该使用模型,什么时候应该使用助手类/库?没有详细介绍模型,只是主要讨论了雄辩

我可以想到两个例子,其中我不确定我的代码应该放在哪里:

导航创建者 假设我有一组文章由
文章扩展雄辩的
模型交付,链接到
文章
数据库表。如果我想创建一组指向其他页面的动态导航链接,例如
上一篇
文章、
下一篇
文章、附近的一篇
文章以及类似的
文章,该怎么办

这将服务于站点中相当大和关键的组件。我可以想象前面四个代码突出显示的示例中的每一个都是一个类的方法,但是该类本身应该是一个独立的模型,还是仅仅是
文章
的助手类

形象塑造者 假设每篇文章中都嵌入了一些易于书写的图像。我可以编写一个
ImageBuilder
类,该类可以解析每篇文章,并根据图像的类型及其在文档中的位置,将嵌入的用户友好的图像语法替换为复杂的HTML

这似乎高度依赖于
文章
类本身,因此我倾向于将其作为助手类而不是模型本身,但我仍然不确定



区别在哪里?我在哪里划界?特别是我的例子,你会推荐什么?

我不是这个话题的最后一位,但我会给你我的两分钱。我相信你会从其他比我好得多的人那里得到一些很好的建议。我将尽量保持这一简单,但无论如何这并不是详尽无遗的

什么时候应该使用模型,什么时候应该使用助手类/库? 你不想听的答案是,这取决于你的申请。为简洁起见,请将模型想象为应用程序中项目的蓝图。这些内容包括帖子、页面、文章、图像、用户等。构成应用程序的所有内容,每个内容都有关于它们如何相互关联和创建的规则。如果你看到这个项目被重复使用一次又一次,它可能是一个模型


现在,请看您的具体示例:

导航创建者

对我来说,
上一篇
下一篇
附近的
类似的
都将出现在您的
文章
模型中。这些方法将以特定的方式帮助您搜索该模型。我会重温一下查询范围,因为它们为您的模型提供了强大的功能和灵活性。类似这样的东西可以帮助你建立文章模型

public function scopePrevious($query)
{
    $currentArticleId  = $this->id;
    $previousArticleId = $this->id - 1;

    return $query->where('id', '=', $previousArticleId);
} 
在搜索前一篇文章时,可以使用此选项,如下所示:

$article->previous();
这是无法测试的,但它只是一个例子

图像生成器

这取决于您是否使用所见即所得编辑器或如何附加图像。我非常喜欢为图像创建单独的模型,然后使用多态关系,这样我就可以在整个应用程序中使用它们,并让它们与需要图像的任何其他模型交互

您可以查看可能附加到应用程序多个部分的注释、图像和文档等内容


如果您使用的是所见即所得(WYSIWYG),并且必须进行大量解析,而且图像实际上没有任何数据库条目,那么在单独的文件夹中加载一个帮助器类可能是最好的选择。

好吧,太棒了!谢谢你的回复。我不知道存在范围查询,我同意这可能是最好的方法。今晚我将阅读有关多态性的文章。干杯我想你会很高兴看到这个功能可以扩展你的模型,使它们适合你的应用需求!很高兴我能帮忙。