CodeIgniter MVC最佳实践 - 控制器

时间:2012-12-24 11:17:14

标签: php codeigniter

我创建了一个Google控制器类,它有一个方法distance()。这使用Google的距离矩阵来计算两个邮政编码之间的距离并返回值。

现在我有另一个名为“Person”的控制器类。我想在我的${Google}->distance()课程中调用Person方法,看看这个人离某个邮政编码有多远。

我将如何实现这一点,并且我正确地采用这种方式。

2 个答案:

答案 0 :(得分:4)

如果需要调用另一个控制器的方法,则需要使用modular extensions,因为CI本身不支持HMVC。

但是在你的情况下,将这样的逻辑放在控制器中是一个糟糕的设计实践,你需要使用CI libraries(推荐,因为Google是一个实用程序类)或{{3} (如果类抽象数据库交互)。

只需将您的课程安排在application/libraries/Google.phpPerson控制器中:

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