2010-07-07 29 views
4

我對CodeIgniter和MVC哲學比較陌生,所以我在做任何壞習慣之前都試圖澄清這一點。模型或CodeIgniter控制器中的邏輯?

我有一個註冊的應用程序。用戶。目前,該流動是這樣的:

  1. 用戶導航到「somewebpage /註冊」,它加載控制器
  2. 控制器檢查以查看是否在表單提交的「註冊」函數 - 如果它是不是,向他們展示形式,否則,調用「用戶」模型的「註冊」功能
  3. 用戶模型檢查以查看用戶名是否已被佔用。如果是,它會返回一個錯誤代碼(定義爲PHP常量)。
  4. 如果用戶名尚未被使用,模型將註冊用戶並返回TRUE。
  5. 控制器收集模型返回的「註冊」功能,並根據錯誤代碼顯示錯誤頁面,成功頁面或數據庫失敗頁面。

正如您所看到的,我嘗試將盡可能多的邏輯移入模型中。我無法重新定位的唯一邏輯就是表單驗證,因爲CodeIgniter似乎強迫你把它放到Controller中。 (除非有人知道解決這個問題的方法)

這是我應該用CodeIgniter開發還是一般用MVC開發的方式?

在此先感謝您的幫助。

回答

6

正如你所發現的CI是靈活的,並允許你以幾種不同的方式組織事物。我的感覺是,模型應該只保留用於直接與你的數據庫溝通的功能。我不會將它們用於一般邏輯。我明白爲什麼你不想用邏輯填充你的控制器。我的解決方案是創建自己的庫來包含您隨後從控制器調用的邏輯。有一個關於如何創建自己的庫這裏信息: http://codeigniter.com/user_guide/general/creating_libraries.html

對於用戶身份驗證創建其中載登錄時使用的函數庫叫auth_library.php,註冊等控制器。以同樣的方式,你可以創建一個auth_model,其中包含與db連接的函數。

您可能也有興趣在這個系列教程: http://www.phpandstuff.com/articles/codeigniter-doctrine-from-scratch-day-1-install-and-setup 筆者將向您介紹使用與CI學說插件,它使你的模型和數據庫之間的抽象層。這是非常有趣的,出色的解釋和使用註冊/登錄系統的初始例子。

+1

MVC中的模型假設它具有邏輯,因爲它是領域模型,但沒有什麼能夠阻止你將它分解成不同的層。 – airmanx86 2010-07-07 14:57:51

+0

謝謝你的幫助,musoNic80和airmanx86!你們澄清了這個令人困惑的問題。 我越來越擔心 - 沒有人回答。 ;) 謝謝! – 2010-07-10 06:54:30

+0

@ airmanx86,musoNic80我發現你的討論很有用,但是我有一個問題。根據從控制器傳遞給模型的數據,在模型中應用邏輯是一種好方法嗎?就像如果一個變量是空的,我想運行這個查詢,否則這個查詢。這是一個好方法嗎? – 2017-03-02 08:29:15

相關問題