我創建了一個Google
控制器類,其中有一個方法distance()
。這使用Google的距離矩陣來計算兩個郵政編碼之間的距離並返回該值。CodeIgniter MVC最佳實踐 - 控制器
現在我有另一個名爲「Person」的控制器類。我想從我的Person
類中調用${Google}->distance()
方法,以查看此人離某個郵編有多遠。
我將如何實現這一目標,並且我會以正確的方式開展工作。
我創建了一個Google
控制器類,其中有一個方法distance()
。這使用Google的距離矩陣來計算兩個郵政編碼之間的距離並返回該值。CodeIgniter MVC最佳實踐 - 控制器
現在我有另一個名爲「Person」的控制器類。我想從我的Person
類中調用${Google}->distance()
方法,以查看此人離某個郵編有多遠。
我將如何實現這一目標,並且我會以正確的方式開展工作。
如果需要調用另一個控制器的方法,則需要使用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);
你問的關於MVC的內容較少,但更多關於PHP中對象和實例的工作方式。
一個最簡單的用法是:
$google = new Google();
$distance = $google->distance();
這是不高的設計,但對你的第一步,得到它的工作。稍後,您可以決定在其他地方創建Google
實例是否更好,例如, Codeigniter提供了庫加載機制,因此您可以稍微隱藏一些細節,並可以更輕鬆地訪問功能。
而不是創建一個控制器,你可以創建一個距離計算腳本庫,並呼籲從哪個控制器要在圖書館... –
或者你可以簡單地創建一個自定義幫手 –
謝謝大家,我也是CI的新手,這就是爲什麼我錯過了整個庫的事情。 –