usumoio
usumoio

Reputation: 3568

Calling AppModel function in AppController for cakephp

I have a function that I want all of my controllers to be able to use, so I have defined it in AppController. Now part of what this function will do has no business being in a controller and so it should be in a model, but since this is a universal operation, it only seems correct that it be in AppModel. My function looks as followed:

class AppController extends Controller {

    public function i_need_this_everywhere ($term) {
        // do some stuff

        // this is the line that is an issue
        // it seems like this should be simple and work, but no variation of this is working
        $value = $this->App->get_some_cool_data($term);

        return $value;
    }

}

I simply want to be able to call an AppModel function from AppController. I have tried the following:

// I have tried several variations of this.
$this->loadModel('AppModel');
$this->AppModel->get_some_cool_data($term);

But this then complains about the lack of database table called AppModel, at which point, in AppModel I tried setting:

public $useTable = FALSE;

But that blows the whole app up so... Now I am out of ideas. Any help would be greatly appreciated.

Upvotes: 6

Views: 4153

Answers (3)

Zoë Blade
Zoë Blade

Reputation: 96

If you want to use a method in AppController to call a method in AppModel, using the specific model class that belongs to the invoked controller class, then I believe (I could be wrong) this is how you should do it:

class AppController extends Controller {
    public function foo() {
        $this->{$this->modelClass}->bar();
    }
}

$this->modelClass is the class of the model that belongs to whichever controller inherited AppController, so that will invoke AppModel as whichever model it's supposed to be at the time.

Upvotes: 0

usumoio
usumoio

Reputation: 3568

To solve this for me, the solution that worked but I am unsatisfied with is to place these functions in the AppModel and then call them from any model like so:

$this->WhatEverModelIAmIn->the_general_function_I_need($some_argument);

Upvotes: 0

Kai
Kai

Reputation: 3823

All your models should inherit from AppModel, so why not call $this->AnyModel->get_some_cool_data($term); instead? AppModel should be pretty much be an abstract class anyways -- you pretty much never want to instantiate it, you just use as a base class.

Also, that should be $useTable = false; not $usesTable. Remember that, again, all your models should inherit from AppModel, so all your models will end up not using the database as well, which is probably the source of your errors.

Upvotes: 7

Related Questions