What is the difference between library and model in CodeIgniter Framework?

后端 未结 2 658
有刺的猬
有刺的猬 2021-02-14 15:22

I am new to CI. Before I had worked extensively in RoR and Symfony.

I am unable to understand why exactly CI provides Library and Models. Most of the CI code I examined

相关标签:
2条回答
  • 2021-02-14 15:53

    There are probably other schools of thought on this, but for me it's as follows:

    Models

    Models are tightly coupled to your application, making direct references to your DB schema/architecture/file paths etc.

    Libraries

    Libraries are loosely coupled. They should be treated like 3rd party add-ons and should make no assumptions about your app or your system. You should be able to "drop in" libraries at will with a minimum amount of configuration. Indeed, the opposite should be true, items in your library folder should be able to be dropped into any other CI application.

    0 讨论(0)
  • 2021-02-14 16:08

    The basci thought on Libraries was a way to extend Codeigniter's functionality through classes.

    If you compare the blank anatomy of a Library and a Model in Codeigniter, you will see that Models extend the CI_MODEL which allows you to access Codeigniter's native resources (for Example $this->db).

    Libraries do not offer that basic access and they also do not need to be extended through the CI_MODEL.

    Models are made to depict and interact with data (mostly abstracted from databases such as mysql).

    Take a look at the basic Library

    <?php defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Library{
    
       public function MyFunction(){
          //do something...
       }
    
    }
    

    ...and the Model anatomy

    <?php defined('BASEPATH') OR exit('No direct script access allowed');
    
    class User_model extends CI_Model {
    
       public function __construct(){
            parent::__construct();            
        }
    
        public function MyFunction(){
            //do something...
        }
    }
    

    In most cases the Models are prepared to use Ressources to access databases or other functionalities. Libraries don't. You need to include or extend the Ressources manually if you need them:

    //Create an CI instance
    $CI =& get_instance();
    

    Libraries are tool collections and function extensions while Models are natively ideal for abstracting and interacting with data coming from databases.

    0 讨论(0)
提交回复
热议问题