2012-05-23 84 views
1

你好,我有一些關於mvc模式和框架的問題。 我知道MVC代表模型 - 視圖 - 控制器和模型是胖的,控制器是瘦的,但我不太確定一些細節..在視圖部分。 比方說,比如我有這個模型mvc模式,框架,實現

<?php 
class Menu_Model extends Models 
{ 
    public function listMenuItems() 
    { 
     return $this->query('some_select'); 
    } 
} 

控制器

<?php 
class Menu_Controller extends Controllers 
{ 
    public function index() 
    { 
     $this->load('menu', 'Menu_Model'); 
     $this->view->assign('menuItems', $menu->listMenuItems()); 
     $this->view->add('menu.php'); 
    } 
} 

視圖

<div class="menu"> 
<li>{echo_some_data_from_controller}</li> 
</div> 

上面的代碼讓我們說是一個簡單的菜單快捷現在寫了..作爲一個例子。由mvc ideea它需要有一個模型一個視圖和一個控制器很好,但那麼我如何在每個視圖中實現這個菜單?讓我們假裝: head.php文件,其中我保留導入CSS的HTML開始與基本的東西和網站的頭來從MySQL獲取數據的菜單我需要調用模型,但模型被稱爲控制器和每個頁面都得到了它自己的控制器,所以從我理解的每一個控制器方法我都需要調用某個模型菜單,登錄表單等......在每個頁面上輸出我需要獲取數據或如何執行我做了嗎?

+0

你使用特定的框架嗎? – Anas

+0

@ssx它看起來像Code Igniter – Gordon

+0

實際上我使用的是[TinyMVC](http://www.tinymvc.com),但這裏是一個基於大多數框架處理數據的例子.. :-) – Bogdan

回答

3

The responsibility of a Controller is to handle User Input。如果您的菜單不需要任何用戶輸入,請將代碼放入View Helper中,然後從那裏獲取Model數據。然後call that View Helper from the View。換句話說:你不需要控制器。

另一種方法是提供某種機制,允許你在對控制器的每次調用中註冊通用功能,例如, something like Zend Frameworks's pre- and post-dispatch hooks。然後,您可以編寫這些鉤子的插件,以便在每個請求中加載和注入某些模型數據。

+0

等基礎知識什麼不需要控制器我只寫一個模型/插件..我直接在視圖中調用它,而無需爲他們編寫某種控制器? 看看這裏的代碼/問題[鏈接](http://stackoverflow.com/questions/10703064/tinymvc-model-plugin-how-to-implement) – Bogdan

+0

@Bogdan對不起,我不明白你剛剛問了什麼。你能改說嗎? – Gordon

+0

爲每個模型,不需要用戶輸入,只需要一個窗體在視圖中輸出數據我不需要控制器,我可以把它寫成插件/模塊/幫手,並在視圖中調用它不是? – Bogdan