2012-02-08 15 views
0

我使用Codeigniter來構建一個Web應用程序,我試圖遵循適當的OOP,MVC和Codeigniter約定。有幾件事絕對是逃避我的。以下是對我感到困惑的簡單解釋。我該如何使用Codeigniter將類數據傳遞給我的視圖?

我有一個'公司'表和一個Companies_model。這個模型具有id,name和url等私有變量。該模型有一個名爲load_data($ id)的方法,該方法使用一個id將有關公司的所有數據加載到類變量中。這個$ id來自URL。最後,這個模型具有返回值的公共getter。

我的網站上有我的系統中的每個公司的個人資料頁面。在我的公司控制器中,我以下面的方式加載公司的數據。

$this->load->model('Companies_model', 'Companies_profile'); 
$this->Companies_profile->load_data($this->uri_company_id); 

當我的其他邏輯是在控制器完成,我有以下代碼呈現視圖:

$this->data['Companies_profile'] = $this->Companies_profile; 
$this->load->view('profiles/companies_profile_view', $this->data); 

我認爲,我渲染數據是這樣的:

<p>This company's name is <?php echo $Company_profile->get_name(); ?>.</p> 

所有這些似乎都是多餘的。爲什麼當數據已經在Companies_method的特定實例中可用時,將數據傳遞給視圖?我感到困惑,我做錯了什麼,但我無法弄清楚那是什麼。也許我沒有做錯任何事,但還沒有遇到這種結構的一些原因。總的來說,我的應用程序非常簡單。有人可以闡明如何正確地組織數據並將其傳遞給視圖嗎?爲什麼要傳遞這些數據,而不是僅僅在CI的基類中提供這個$ this?

注意:我在每個頁面上顯示了多個Companies_model實例,因爲我在每個配置文件頁面上都有相關公司的列表。

回答

2

這就是MVC,至少它是在CodeIgniter中完成的。顯示值從數據庫中檢索它們的分離。在這種簡單的情況下,這些優勢並不是真正可見的。

想象一下你以後決定改變數據庫結構。您只需要重寫模型即可返回相同的類並保留前端代碼。你也可以給一些網頁設計師看看設計,而不告訴他任何關於數據庫結構等等。

當你在團隊中工作時,MVC的一個主要優勢就顯現出來了。與其提出自己的約定,每個人都可以統一做這些事情。

1

傳遞一個類對象給他查看打破了MVC背後的想法。 MVC旨在將編程的各個部分分解爲3個方面。模型,視圖和控制器。你傳遞給視圖的只是視圖需要的東西。該視圖可能不需要整個對象。它可能只需要來自對象的某些信息。它允許您保持業務邏輯遠離視覺設計。它允許一個知道HTML和一點PHP的網頁設計師進入並做出改變,而不必知道你的對象是如何工作的。他看。

<?php echo $company_name ?> 

這是一個更容易對非技術人員,而不是解釋

<?php echo $company->getName(); ?> 
相關問題