2013-02-01 134 views
4

我正在努力研究在新的Laravel 4應用程序中構建我的控制器/模型的「最佳」方式。Laravel 4中的瘦控制器

顯然我想保持控制器的輕薄。所以我想與Repos/Services合作來分離事情,但我並不真正知道如何在Laravel 4中實現這一點.Laravel 3給了我們some idea of how this should work,但沒有樣本。

有沒有人想出了最簡單的方法來做到這一點,或有任何我可以窺探的示例代碼?

+0

這個例子足以在我看來開始。 – itachi

+0

也許我錯過了一些東西,我只是覺得在哪裏存儲回購/服務不是很清楚,也不是訪問它們的最佳方式。 –

+0

這是問題。要理解它,你需要走出模型==數據庫的概念。這個例子是爲了展示設計。你需要改變它以適應你的需求。例如您可以擁有驗證器(用於驗證),數據庫(僅用於查詢),處理器(用於處理來自控制器的請求,計算),通用(封裝由許多類共享的常用方法)等等。不同的項目需要不同的方法。這個例子是假設給出一個想法,而不是緊束縛。您需要擴展它,以關注您的項目。 – itachi

回答

7

我同意的事實,這不是很清楚在哪裏這些類存儲在Laravel 4

一個簡單的解決辦法是在你的主應用程序/文件夾中創建庫/服務的文件夾,並更新你的主要作曲家以.json文件,讓他們自動加載:

{ 
    "require": { 
     "laravel/framework": "4.0.*" 
    }, 
    "autoload": { 
     "classmap": [ 
      "app/commands", 
      "app/controllers", 
      "app/models", 
      "app/database/migrations", 
      "app/tests/TestCase.php", 
      "app/repositories", 
      "app/services" 
     ] 
    }, 
    "minimum-stability": "dev" 
} 

注意:每次你創建你需要運行composer dump-autoload一個新的類。

在存儲庫的情況下,您可以讓Laravel自動將它們注入控制器。我發現this在這個問題上的一個很好的屏幕錄像。

+0

我的一個問題是,爲什麼不在庫中創建靜態函數?爲什麼該示例使用需要創建存儲庫實例的普通函數? –

+1

靜態函數往往會導致可測試性問題,這是L4中的一個重點。 –

2

當我得到一個新的安裝Laravel的,我做的第一件事是:

  • 刪除 「模型」 文件夾
  • 創建一個src文件夾
  • 下SRC,創建應用程序文件夾(或應用程序的名稱)
  • 在應用程序文件夾上,創建實體,存儲庫,服務和測試

因此,在這種情況下,您的命名空間將應用\實體,應用\庫和應用程序\服務

在composer.json:

{ 
    "require": { 
     "laravel/framework": "4.0.*" 
    }, 
    "autoload": { 
     "psr-0": { 
      "Application": "app/src/" 
     }, 
     "classmap": [ 
      "app/commands", 
      "app/controllers", 
      "app/database/migrations", 
     ] 
    }, 
    "minimum-stability": "dev" 
} 

對於那些你需要的每一個創建類和服務提供者以將存儲庫綁定到實體。

這裏是一個教程,說明如何創建庫:

http://culttt.com/2013/07/08/creating-flexible-controllers-in-laravel-4-using-repositories/

無論如何,我仍然在尋找最好的架構。如果有人有更好的主意,我會很高興聽到它!