2

我是 CodeIgniter 的新手,我有这个功能,我在多个模型中使用。

// Returns TRUE if the array of values supplied
// each correspond to a column in the database table.
// Else returns the value of the bad column.
private function _columns_exist( $columns, $table ) {

    foreach( $columns as $key => $value ) {

        if( !$this->db->field_exists( $key, $table ) ) {

            return $key;

        }

    }

    return TRUE;

}

什么被认为是编写一次函数并从许多不同文件中重用它的正确方法?

我想为这个功能创建一个完整的库吗?

4

2 回答 2

2

如果您在模型之间使用通用功能,则可以首先扩展核心模型,然后让所有其他模型对其进行扩展。在此处阅读有关扩展核心类的更多信息:http: //ellislab.com/codeigniter/user-guide/general/core_classes.html

class MY_Model extends CI_Model {

  public function __construct()
  {
      parent::__construct();
  }

  public function common_func()
  {
    // content
  }
}

那么您可以在所有其他模型中使用此功能

class Some_model extends My_Model {

  public function __construct()
  {
      parent::__construct();
  }

  public function some_func()
  {
    // use the common function here
    $result = $this->common_func();
  }
}
于 2012-12-22T08:27:26.483 回答
2

CodeIgniter 的重点是自定义函数基本上有两种类型。那些作为库方法存在于库中的那些,以及作为简单函数存在于帮助器中的那些。

它们之间的差异很小,由您决定将它们保存在哪里,但最佳实践是辅助函数大多是独立的,而库方法是使用 CI 库(如数据库、会话、其他模型)的方法。

对于您的功能,最好制作一个库并将其保留在那里,但您也可以制作一个助手,因为您不会过度使用任何数据库查询。如果是我,我会做一个帮手:

helpers在名为的目录中创建一个文件,db_helper.php并将一个元素添加db到文件中的辅助数组autoload.php。请注意,您不需要写全名db_helper,只需db.

将此代码放入db_helper.php您创建的文件中:

<?php
if(!function_exists('_columns_exist')) {
    function _columns_exist( $columns, $table ) {
        $CI =& get_instance();
        foreach( $columns as $key => $value ) {
            if( !$CI->db->field_exists( $key, $table ) ) {
                return $key;
            }
        }
        return TRUE;
    }
}

现在你可以在任何地方使用这个函数——在你的控制器、模型甚至视图文件中,就像它是一个简单的函数一样:

_columns_exist($columns, $table)

请注意,您不要$this在帮助程序或库中使用,您必须先获取 CodeIgniter 单例对象的实例,然后再对其进行操作。您可以在用户指南或 StackOverflow 上找到更多信息。

另请参阅我对darkdad答案的评论,这是我会采用的另一种好方法。

于 2012-12-22T08:58:02.703 回答