bestprogrammerintheworld
bestprogrammerintheworld

Reputation: 5520

I can't call a static function from another controller in codeigniter. Why?

I have started to create a controller called User in codeigniter

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class User extends CI_Controller {

        public function __construct() {
            parent::__construct();
            $this->load->helper(array('form', 'url'));
            $this->load->library(array( 'encrypt', 'form_validation' ));
        }

        public function index()
        {                
        }

        /*
         * Create loginform
         * Parameters:  void
         * Return:      html of loginform;
         */
        public static function loginform() {

                // Login form setup
                $loginform_data = array();                  
                $loginform_data['attributes']       = array('id'  => 'loginform');  
                $loginform_data['username']         = array(
                                                            'name'        => 'username',
                                                            'id'          => 'username',
                                                            'value'       => '',
                                                            'maxlength'   => '100'                                                    
                                                    );                
                $loginform_data['pass']             = array(
                                                            'name'        => 'pass',
                                                            'id'          => 'pass',
                                                            'value'       => '',
                                                            'maxlength'   => '100'                                                    
                                                    );      

                $contentdata = array();
                $contentdata['loginform'] = $this->load->view('partials/forms/login', $loginform_data, true);
                return $contentdata;
        }

        /*
         * Check login username, password from form
         * Parameters:  void
         * Return:      void;
         */
        public function login() {
                $name = $this->input->post('username');
                $pass = $this->input->post('pass');

                $this->form_validation->set_rules('username', 'Användarnamn', 'required');
                $this->form_validation->set_rules('pass', 'Lösenord', 'required');

                if ($this->form_validation->run() == false)
                {
                        $this->load->view('home');
                } 
                else
                {
                        $this->load->view('formsuccess');
                }
            }
}

I can call the user/login - function through the url. But I can't call User::loginform() from another controller. Shouldn't I be able to do that?

Here's what I'm trying: (from my Home-class)

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends CI_Controller {

    public function index()
    {
                //Create login and register-forms
                $this->load->helper('form');

                //Registration form setup               
                $registerform_data = array();                  
                $registerform_data['attributes']    = array('id'  => 'registerform');  
                $registerform_data['company']       = array(
                                                            'name'        => 'name-company',
                                                            'id'          => 'name-company',
                                                            'value'       => '',
                                                            'maxlength'   => '100'                                                    
                                                    );                
                $registerform_data['orgnr']         = array(
                                                            'name'        => 'orgnr-company',
                                                            'id'          => 'orgnr-company',
                                                            'value'       => '',
                                                            'maxlength'   => '100'                                                    
                                                    );        
                $registerform_data['contact']       = array(
                                                            'name'        => 'contact-company',
                                                            'id'          => 'contact-company',
                                                            'value'       => '',
                                                            'maxlength'   => '100'                                                    
                                                    );                      
                $registerform_data['phonecompany']  = array(
                                                            'name'        => 'phone-company',
                                                            'id'          => 'phone-company',
                                                            'value'       => '',
                                                            'maxlength'   => '100'                                                    
                                                    );                          
                $registerform_data['emailcompany']  = array(
                                                            'name'        => 'email-company',
                                                            'id'          => 'email-company',
                                                            'value'       => '',
                                                            'maxlength'   => '100'                                                    
                                                    );   




                //What content to pass to view       
                $contentdata = array();
                $contentdata['loginform'] = User::loginform();
                $contentdata['registerform'] = $this->load->view('partials/forms/registration', $registerform_data, true);                

                $this->load->view('home', $contentdata);
    }
}

$contentdata['loginform'] = User::loginform(); gives me error:Fatal error: Class 'User' not found in C:\Program...

What am I missing?

Upvotes: 3

Views: 1288

Answers (1)

GautamD31
GautamD31

Reputation: 28763

While you are extending Home class ,extend to User controller like

require_once(APPPATH.'controllers/user.php');
class Home extends User {

Because you need to extract the function from User class and then it will Inherit the parent class User functions And since login_form is your public function in User controller,you can call this in Home controller now.And no need to use Static here I think so.

There is also an way to do this.Just write the login_form function in an helper and call it on both the controllers then your problem may solve.

Edit: As @IJas said,we need to include the controller file that you are extending.

Upvotes: 1

Related Questions