[英]Laravel Application Structure: When should I use a model, and when should I use a helper class?
在過去的一周中,我一直在學習MVC,尤其是Laravel PHP框架。 我已經注冊了Laracasts,並且對MVC模式的工作原理有基本的了解,但是尚未向我說明的一件事是何時使用模型。
每次向我展示什么是模型時,它都會擴展Eloquent
並鏈接到數據庫表。 Jeffrey Way特別指出了不要將“模型”與“表”合並,因此我假設您可以創建和使用未鏈接到數據庫表的模型,但是我不確定何時這樣做。
而且,我對此並不完全確定: 什么時候應該使用模型,什么時候應該使用幫助器類/庫? Laravel文檔沒有詳細介紹模型,而僅主要討論Eloquent。
我可以想到兩個示例,在這些示例中我不確定應將代碼放置在哪里:
假設我有文章Article extends Eloquent
模型提供的一組文章,鏈接到articles
數據庫表。 如果我想創建一組指向其他頁面的動態導航鏈接,會發生什么,例如previous
一篇文章, next
一篇文章, nearby
的一篇文章以及similar
文章。
這將為站點提供相當大且至關重要的組件。 我可以想象前面四個突出顯示代碼的示例中的每個示例都是一個類的方法,但是該類本身應該是一個獨立的Model還是僅僅是Article
的幫助類?
假設每篇文章都以易於編寫的形式嵌入了圖像。 我可以編寫一個ImageBuilder
類,該類可以解析每篇文章,並根據圖像的類型以及圖像在文檔中的位置,將嵌入的用戶友好圖像語法替換為復雜的HTML。
這似乎高度依賴Article
類本身,因此我傾向於將其作為輔助類而不是模型本身,但是我仍不確定。
區別在哪里? 我在哪里划界線? 特別是在我的示例中,您會推薦什么?
在這個話題上我還不是全部,但我會給你兩美分。 我相信您還會從其他方面得到比我更好的其他一些很好的建議。 我將嘗試保持這一簡單性,但這絕不是窮舉。
什么時候應該使用模型,什么時候應該使用幫助器類/庫? 您不想聽到的答案取決於您的應用程序 。 為簡潔起見,請考慮將模型視為應用程序中項目的藍圖。 這些是諸如帖子,頁面,文章,圖像,用戶等之類的東西。構成應用程序的所有事物,每個事物都有關於它們如何相互關聯並被創建的規則。 如果您發現此項目一次又一次地被重復使用,則可能是一個模型!
現在來看您的具體示例:
導航創建者
對我來說, previous
, next
, nearby
和similar
的都是自定義查詢范圍 ,它們將在Article
模型中。 這些方法將以特定的方式幫助您搜索該模型。 我會重提查詢范圍,因為它們為您的模型提供了強大的功能和靈活性。 這樣的事情可能會對您的Article模型有所幫助。
public function scopePrevious($query)
{
$currentArticleId = $this->id;
$previousArticleId = $this->id - 1;
return $query->where('id', '=', $previousArticleId);
}
然后在搜索上一篇文章時可以使用它,例如:
$article->previous();
這可能未經測試,但這只是一個例子。
圖像生成器
這取決於您使用的是“所見即所得”編輯器還是附加圖像的方式。 我非常樂於為Image創建一個單獨的模型,然后使用多態關系,這樣我就可以在整個應用程序中使用它們,並使它們與需要圖像的任何其他模型進行交互。
您可能會查看“ 多態”關系中諸如注釋,圖像和文檔等可能附加到應用程序多個部分的內容。
如果您使用的是“所見即所得”,並且必須進行大量的解析,並且實際上沒有任何圖像的數據庫條目,那么在單獨的文件夾中加載的幫助程序類可能是最好的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.