我创建了一个Google
控制器类,它有一个方法distance()
。这使用Google的距离矩阵来计算两个邮政编码之间的距离并返回值。
现在我有另一个名为“Person”的控制器类。我想在我的${Google}->distance()
课程中调用Person
方法,看看这个人离某个邮政编码有多远。
我将如何实现这一点,并且我正确地采用这种方式。
答案 0 :(得分:4)
如果需要调用另一个控制器的方法,则需要使用modular extensions,因为CI本身不支持HMVC。
但是在你的情况下,将这样的逻辑放在控制器中是一个糟糕的设计实践,你需要使用CI libraries(推荐,因为Google
是一个实用程序类)或{{3} (如果类抽象数据库交互)。
只需将您的课程安排在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);
答案 1 :(得分:0)
你问的是关于MVC的更少,但更多关于PHP中的对象和实例如何工作。
最直接的用法是:
$google = new Google();
$distance = $google->distance();
这不是很高的设计,但是让你开始工作的第一步。稍后您可以决定在其他地方创建Google
实例是否更好,例如Codeigniter提供了库加载机制,因此您可以稍微隐藏细节,并可以更轻松地访问功能。