2012-03-13 96 views
-1

目前我在做Zend的項目我做的是可以正常使用的方式,但我敢肯定它不是我的方式我想這樣做我的意思是我不是以下MVC,我想在我的zend應用程序中應用MVC。 我正在粘貼一個簡單模塊的代碼,它將描述我正在做什麼,並且糾正我在哪裏犯錯。如何實現MVC在我的Zend框架

我控制器

class ContactsController extends Zend_Controller_Action{ 

    public function contactsAction(){ 
    if(!Zend_Auth::getInstance()->hasIdentity()){ 
      $this->_redirect('login/login'); 
     } 
     else{ 

     $request    = $this->getRequest(); 
     $user     = new Zend_Session_Namespace('user'); 
     $phone_service_id  = $user->p_id; 

     $instance    = new Contacts(); 
     $select     = $instance->Get_Contacts($p_id); 

     $adapter    = new Zend_Paginator_Adapter_DbSelect($select); 
     $paginator    = new Zend_Paginator($adapter); 
     . 
       . 
     //more code 
    } 

PLZ注意此2號線在我的控制器

$instance    = new Contacts(); 
$select     = $instance->Get_Contacts($pid); 

這是我接觸類車型

class Contacts extends Zend_Db_Table{ 

function Get_Contacts($p_id){ 
    $DB = Zend_Db_Table_Abstract::getDefaultAdapter(); 

    $select = $DB->select() 
     ->from('contact', array('contact_id','contact_first_name','contact_mobile_no','contact_home_no','contact_email','contact_office_no')) 
     ->where('pid = ?', $p_id) 
     ->order('date_created DESC'); 

     return $select; 
    } 
    } 

此我簡單後我的結果分配給我的看法。

注請 作爲其工作,但沒有在我的課私有數據成員,我的課是不是一個藍色print.there沒有getter和setter方法我。怎麼才能讓我的代碼最適合MVC和OOP ??

+2

實際上你接受答案時不接受的原因是什麼,接受另一個只是指向手冊的原因?這與我在評論中提供的鏈接相同,只是我提供了更全面的解釋:) – 2012-03-21 10:30:52

+0

您是否知道'extends'構成「IS A」關係。聯繫人不是數據庫表。 – 2013-08-05 14:52:47

回答

0

記住一件事當u學習新的技術,所以先閱讀thier自己的文檔。沒有人能比他們更好地解釋。它首先很難理解,但是當你學習它時,你會習慣並且會比你更喜歡我Zend Offical Site

3

最簡單的答案:你已經差不多MVC了。你使用一個Zend_Controller_Action來獲取一些數據,並將它傳遞給你渲染html的視圖層。唯一缺少的部分是你的模型,它在控制器和你的數據網關(你實現了表數據網關模式,Zend_Db_Table的東西)之間混合起來。

我給在回答中一個非常詳盡的解釋another question我怎麼會正確設置控制器和模型之間的關係。我還將此與表單結合起來,以處理數據輸入,過濾和驗證。然後爲了捆綁一些常用功能,我在模型和控制器之間引入了一個服務層。

與控制器,你執行一些操作(列出我的所有聯繫人,創建新的聯繫人,修改聯繫人)和模型純粹是包含數據(ID,姓名,電話,地址)。該服務有助於對一些函數(findContactByName,findContactById,updateContactWithForm)進行分組。

如果你知道如何分割控制器,模式,形式和服務,您的控制器可以成爲這樣的事情:

class ContactsController extends Zend_Controller_Action 
{ 
    public function indexAction() 
    { 
     if (!$this->hasIdentity()) { 
      $this->_redirect('login/login'); 
     } 

     $service = new Application_Service_Contacts; 
     $contacts = $service->getContacts(); 
     $paginator = $service->getPaginator($contacts); 

     $this->view->paginator = $paginator; 
    } 

    protected function hasIdentity() 
    { 
     return Zend_Auth::getInstance->hasIdentity(); 
    } 
} 

這是你的個人品味,你想在你的控制器做什麼:我想說你儘可能少地放在你的控制器中,但你需要保持控制。因此:在控制器中發生獲取數據的調用,在其他地方檢索這些數據。另外:在控制器中發生將數據集轉換爲其他內容的調用,轉換髮生在其他地方。

這樣你可以,如果你提供了足夠的方法來爲您服務類來獲取數據極快更改控制器的結果。 (注意我把Zend_Auth帶到了另一個函數中:如果你有其他的動作,你可以使用這個函數,而且如果你想改變認證中的某些東西,你可以在一個地方找到它,而不是控制器中的每一個動作)

+0

thanQ非常先生那麼我的模型和服務呢? – 2012-03-13 12:24:55

+0

您可以查看ZF快速入門,瞭解如何使用表數據網關模式創建模型。快速入門提到了一個數據映射器(在他們的例子中:Application_Model_GuestbookMapper),我寧願將它放到一個單獨的子名空間(Service)中,而不是Model中,但這個想法是一樣的:http://framework.zend.com/manual/ EN/learning.quickstart.create-model.html – 2012-03-13 12:40:31