在 CodeIgniter 用户指南中,示例模型具有对应数据库表中每个字段的属性:
class Blogmodel extends CI_Model {
var $title = '';
var $content = '';
var $date = '';
//...
但是,当它返回一组博客文章时,它们只是通用对象。
function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
如果每篇博文都只是一个通用对象,那么类开头的属性的目的是什么?
将每篇博客文章作为一个完整的模型对象填充其内容似乎会很好。然后你可以编写在内部获取值的方法。但是,用户指南中的所有示例似乎都显示每个控制器都有每个模型的一个实例,并使用该对象来获取包含数据库值的通用对象。此外,示例实例化模型 ( $this->load->model('Blog');
) 的方式很明显,您只希望在控制器中拥有一个模型实例。
如果我的博客文章有一个status
以整数形式存储在数据库中的值,但在几个不同的控制器中,我想将该值显示为人类可读的字符串,那么该函数/方法应该放在哪里?由于我在多个控制器中需要它,并且它特定于一个对象,我认为它应该是模型对象的一种方法。如果每篇博文都是模型的一个实例,我可以这样写:
function get_human_status()
{
$lookup = array(
1 => 'Active',
2 => 'Hidden',
3 => 'Pending');
return $lookup[$this->status];
}
但是,如果每篇博文都是一个通用对象,则它必须如下所示:
function get_human_status($data)
{
$lookup = array(
1 => 'Active',
2 => 'Hidden',
3 => 'Pending');
return $lookup[$data->status];
}
CodeIgniter 哪种方式更惯用?假设是第二个,为什么示例模型定义了这些内部属性?
最后,对于加分,如果我还有其他类似的问题,我应该看哪些书籍、文章或示例?