CodeIgniter Forums
Does a model require that you extend the base model class? - Printable Version

+- CodeIgniter Forums (https://forum.codeigniter.com)
+-- Forum: Archived Discussions (https://forum.codeigniter.com/forumdisplay.php?fid=20)
+--- Forum: Archived Development & Programming (https://forum.codeigniter.com/forumdisplay.php?fid=23)
+--- Thread: Does a model require that you extend the base model class? (/showthread.php?tid=6841)

Pages: 1 2


Does a model require that you extend the base model class? - El Forum - 03-13-2008

[eluser]dtrenz[/eluser]
I see in the documentation that a Controller only needs to extend the base class if you need to add code to the controllers constructor, but in the model docs it says that you always need to extend the base model class in your models.

Is this required? And if so, why is it required in models and not in controllers?


Does a model require that you extend the base model class? - El Forum - 03-13-2008

[eluser]xwero[/eluser]
Where can did you find those lines?

Every controller and model you make extends the base class.
Code:
class Customcontroller extends Controller {}
class Custommodel extends Model {}



Does a model require that you extend the base model class? - El Forum - 03-13-2008

[eluser]Ebot Ndip-Agbor[/eluser]
[quote author="dtrenz" date="1205455012"]I see in the documentation that a Controller only needs to extend the base class...[/quote]
i think i have never seen that in the user guide docs.


Does a model require that you extend the base model class? - El Forum - 03-14-2008

[eluser]dtrenz[/eluser]
http://ellislab.com/codeigniter/user-guide/general/models.html#anatomy


I think I misspoke. I'm actually asking if the constructor, the "parent::Model();" is required.


Does a model require that you extend the base model class? - El Forum - 03-14-2008

[eluser]xwero[/eluser]
You don't have to add it but then you would have to do your own checks to see it the model is already loaded or not.


Does a model require that you extend the base model class? - El Forum - 03-14-2008

[eluser]dtrenz[/eluser]
I don't understand what you mean. I thought that it was only required if I wanted to add my own code to the constructor.


Does a model require that you extend the base model class? - El Forum - 03-14-2008

[eluser]xwero[/eluser]
This is the model class
Code:
class Model {

    var $_parent_name = '';

    /**
     * Constructor
     *
     * @access public
     */
    function Model()
    {
        // If the magic __get() or __set() methods are used in a Model references can't be used.
        $this->_assign_libraries( (method_exists($this, '__get') OR method_exists($this, '__set')) ? FALSE : TRUE );
        
        // We don't want to assign the model object to itself when using the
        // assign_libraries function below so we'll grab the name of the model parent
        $this->_parent_name = ucfirst(get_class($this));
        
        log_message('debug', "Model Class Initialized");
    }

    /**
     * Assign Libraries
     *
     * Creates local references to all currently instantiated objects
     * so that any syntax that can be legally used in a controller
     * can be used within models.  
     *
     * @access private
     */    
    function _assign_libraries($use_reference = TRUE)
    {
        $CI =& get_instance();                
        foreach (array_keys(get_object_vars($CI)) as $key)
        {
            if ( ! isset($this->$key) AND $key != $this->_parent_name)
            {            
                // In some cases using references can cause
                // problems so we'll conditionally use them
                if ($use_reference == TRUE)
                {
                    // Needed to prevent reference errors with some configurations
                    $this->$key = '';
                    $this->$key =& $CI->$key;
                }
                else
                {
                    $this->$key = $CI->$key;
                }
            }
        }        
    }

}
You see the Model constructor does a check if the model is already loaded or not so it doesn't get loaded more than once. This is the reason why you extend the model class otherwise you have to add this code to all your models which are in that case classes you put in the models directory.

If the model class didn't have a role it would be silly to extend it.


Does a model require that you extend the base model class? - El Forum - 03-14-2008

[eluser]dtrenz[/eluser]
so this is only true of Models? Controller constructors are optional?


Does a model require that you extend the base model class? - El Forum - 03-14-2008

[eluser]xwero[/eluser]
The Controller constructor has another purpose. It comes down to the announcing of the controller to the application. If you don't add the Controller constructor you can't use any of the loaded CI libraries.
try this
Code:
class test extends Controller
{
    function test()
    {
        
    }
    
    function index()
    {
        echo 'test';
    }
    
    function test2()
    {
        echo $this->uri->segment(2); // you will get an error
    }
}



Does a model require that you extend the base model class? - El Forum - 03-14-2008

[eluser]dtrenz[/eluser]
that's funny, because i just pulled out the constructor out of all my controllers and everything works fine.

the docs make it sound optional:
http://ellislab.com/codeigniter/user-guide/general/controllers.html#constructors