2012-12-24 145 views
2

我創建了一個Google控制器類,其中有一個方法distance()。這使用Google的距離矩陣來計算兩個郵政編碼之間的距離並返回該值。CodeIgniter MVC最佳實踐 - 控制器

現在我有另一個名爲「Person」的控制器類。我想從我的Person類中調用${Google}->distance()方法,以查看此人離某個郵編有多遠。

我將如何實現這一目標,並且我會以正確的方式開展工作。

+3

而不是創建一個控制器,你可以創建一個距離計算腳本庫,並呼籲從哪個控制器要在圖書館... –

+0

或者你可以簡單地創建一個自定義幫手 –

+0

謝謝大家,我也是CI的新手,這就是爲什麼我錯過了整個庫的事情。 –

回答

4

如果需要調用另一個控制器的方法,則需要使用modular extensions,因爲CI本身不支持HMVC。

但在你的情況下,它是一個不好的設計實踐,以將此類邏輯控制器,你需要使用CI libraries的(因爲Google推薦的是一個實用工具類)或models(如果類文摘數據庫交互)。

只需將您的類application/libraries/Google.php,並在您Person控制器:

// 1. Load library via CI's loader: 
// You may want to autoload the library 
// @see application/config/autoload.php 
$this->load->library('google'); 

// 2. Use library: 
// NOTE: If it's a static class you need to call it as: 
// Google::distance($postcode1, $postcode2); 
$distance = $this->google->distance($postcode1, $postcode2); 
0

你問的關於MVC的內容較少,但更多關於PHP中對象和實例的工作方式。

一個最簡單的用法是:

$google = new Google(); 
$distance = $google->distance(); 

這是不高的設計,但對你的第一步,得到它的工作。稍後,您可以決定在其他地方創建Google實例是否更好,例如, Codeigniter提供了庫加載機制,因此您可以稍微隱藏一些細節,並可以更輕鬆地訪問功能。