tags:

views:

684

answers:

3

I think I might be making a mistake here. I am getting the following error when trying to use a simple function in the time helper in my controller. I don't get an error when using the same function call in the view.

Below is the error from the controller. Followed by the controller code that is failing. Followed by the view code that is working.

Any help is appreciated!

Error:

*Notice (8): Undefined variable: time [APP/controllers/temp_users_controller.php, line 25] Code $checkTime = $time->gmt(); Fatal error: Call to a member function gmt() on a non-object in /var/www/studydeck/app/controllers/temp_users_controller.php on line 25*

Controller:

class TempUsersController extends AppController {

var $name = 'TempUsers';
var $scaffold;
var $components = array('Auth');
var $helpers = array('Time');

function beforeFilter() {
    //list of actions that do not need authentication
    $this->Auth->allow('userCleanUp');

}

//this function will delete TempUser accounts which have not been activated
function userCleanUp() {

    $checkTime = $time->gmt();
    $this->set('checkTime',$checkTime);
}

}

View:

echo $time->gmt();

Update: I tried $time = new TimeHelper(); I received the error Fatal error: Class 'TimeHelper' not found in /var/www/studydeck/app/controllers/temp_users_controller.php on line 23

I do have var $helpers = array('Time')

Also not that echo $time->gmt(); works in the view with out instantiating time anywhere.

+1  A: 

On this line:

 $checkTime = $time->gmt();

The $time variable is not defined and is automatically set to null. The error states that it is not an object (which is correct). Did you initialize it properly? I cannot see any initialisation done for the $time variable.

TheGrandWazoo
+4  A: 

Helpers are thought to be used in views, not in controllers, hence the error. If you really have to use the helper in your controller, you have to instantiate it yourself:

$time = new TimeHelper();
dhofstet
A: 

You generally don't use a helper from the controller. The array you assign in the controller is used to load and instantiate the helper classes before the view is parsed and rendered.

To use the helper in your controller you need to make sure the file is loaded ( included ) correctly and that you have an instance of it to work with. You can also use many of them statically from within a controller, expecially those helpers that don't need access to the controller object.

Cake provides you with a core function that you can use to safely include the files. It will even handle where the file gets loaded from automagically so you don't need to deal with paths.

An example to get you started.

<?php
    class TempUsersController extends AppController
    {
        public $name = "TempUsers";

        public function userCleanUp( ){
            // include the time helper
            App::import( 'Helper', 'Time' );
            $time = new TimeHelper;
            $checkTime = $time->gmt( );
            $this->set( 'checkTime',$checkTime );
        }
    }
?>
Abba Bryant