2012-12-24 96 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提供了库加载机制,因此您可以稍微隐藏一些细节,并可以更轻松地访问功能。