Codeigniter模型通常专门与数据库表(或多个表)绑定。
我们发现我们使用的某些对象具有成员变量和方法,但与数据库中的特定表无关。
此类对象的一个示例是来自OpenStreetMap Web服务的OSMAddress
返回。 This has fields(取决于地点):
这自然适合传递,因此我们创建了一个PHP类来封装它。
麻烦的是,我们不确定这个班级应该住在哪里。获取信息的操作是CodeIgniter helper
函数,但OSMAddress
不是帮助者。
我们使用标准的CodeIgniter结构:
所以:
答案 0 :(得分:2)
Helpers只能拥有一堆全局访问的可重用函数/方法,这些函数/方法可用于特定目的。在这里你不能定义任何类。
我认为你的意思是库,这些库将包含类似java的方法。然后可以根据需要在控制器类中使用这些库。
例如:在您的情况下,您尝试从Web服务获取OSMAddress
。
您需要在库文件夹下创建一个PHP文件来定义一个类。
application/library/your-file-name.php
定义课程OSMaddress
class OSMaddress{
public function __construct() {
//define all your variables here
}
//define all your web service methods here
public function function_1(){
//your code
}
}
完成后,将库加载到控制器类
中class Address extends CI_Controller{
public function __construct() {
parent::__construct();
$this->load->library('OSMaddress');
}
public function function-name(){
//Now call your function from the library
$data = $this->OSMaddress->function_1();
//function_1 will return the data
}
}
有关更多文档,请参阅docs
希望这可以帮到你。
答案 1 :(得分:1)
如果这些类扩展CI_Model
,那么它们可能应该在models目录中。
如果它们没有扩展任何东西 - 换句话说,它们是自定义class
- 那么它们可能属于libraries目录。它们可以被称为“图书馆”。
也就是说,“模型”不必仅与表和/或数据库方法相关。许多开发人员将它们视为“业务逻辑”或任何数据操作的地方,即使不涉及数据库。
没有真正的对错。这是“关注点分离”对您和您的团队最有意义的问题。
还有一件事。如果文件没有定义class
,那么它就是“帮助者”。