У меня есть функция, которую я хочу, чтобы все мои контроллеры могли использовать, поэтому я определил ее в AppController. Теперь часть того, что эта функция будет делать, не имеет никакого бизнеса в контроллере, и поэтому она должна быть в модели, но поскольку это универсальная операция, она кажется правильной только в AppModel. Моя функция выглядит следующим образом:
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; } }
Я просто хочу иметь возможность вызвать функцию AppModel из AppController. Я пробовал следующее:
// I have tried several variations of this. $this->loadModel('AppModel'); $this->AppModel->get_some_cool_data($term);
Но это тогда жалуется на отсутствие таблицы базы данных под названием AppModel, и в этот момент в AppModel я попытался установить:
public $useTable = FALSE;
Но это ударит все приложение так … Теперь у меня нет идей. Любая помощь будет принята с благодарностью.
Все ваши модели должны наследовать от AppModel, поэтому почему бы не вызвать $this->AnyModel->get_some_cool_data($term);
вместо? В любом случае AppModel должен быть абстрактным классом – вы почти никогда не хотите его создавать, вы просто используете его как базовый класс.
Кроме того, это должно быть $useTable = false;
не $usesTable
. Помните, что все ваши модели должны унаследовать от AppModel, поэтому все ваши модели также не будут использовать базу данных, что, вероятно, является источником ваших ошибок.
Чтобы решить эту проблему для меня, решение, которое работало, но я неудовлетворен, заключается в том, чтобы разместить эти функции в AppModel
а затем вызвать их из любой модели:
$this->WhatEverModelIAmIn->the_general_function_I_need($some_argument);