Welcome Guest, Not a member yet? Register   Sign In
Does a model require that you extend the base model class?
#1

[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?
#2

[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 {}
#3

[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.
#4

[eluser]dtrenz[/eluser]
http://ellislab.com/codeigniter/user-gui...ml#anatomy


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

[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.
#6

[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.
#7

[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.
#8

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

[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
    }
}
#10

[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-gui...nstructors




Theme © iAndrew 2016 - Forum software by © MyBB