CakePHP 2 — загрузка функциональности AppModel в AppController

Я прочитал следующий пост Вызов функции AppModel в AppController для cakephp где OP спросил, могут ли они использовать функцию из своей AppModel внутри AppController.

Приведенный ответ на самом деле не отвечает на вопрос (поскольку в нем говорится об использовании AppModel в другой модели, а не в контроллере).

Итак, допустимо ли делать что-то подобное внутри AppController?

$this->loadModel('AppModel');
$this->AppModel->my_function();

Причина, по которой кто-то может захотеть это сделать, заключается в том, что AppController запускается при каждом запросе. Если вам нужно сделать что-то, что задействует вашу БД при каждом запросе, логика для этого может идти в AppModel.php, но выполняться через AppController.php

Обратите внимание, что это относится к Cake 2.0 (не 3), поскольку это устаревшее приложение, с которым мы имеем дело.


person Andy    schedule 26.10.2016    source источник
comment
Что именно вы имеете в виду с чем-то, что связано с БД? Я думаю, было бы легче порекомендовать какой-нибудь правильный способ достижения этой цели, если бы мы знали больше о вашей ситуации. До тех пор, пока я не узнаю больше, лично я бы вызывал $this-›{$this-›modelClass}-›method().   -  person makallio85    schedule 26.10.2016
comment
@ makallio85 не важно что. Все, что я спрашиваю, это приемлемо ли использовать AppModel в AppController, как описано выше. Я понимаю, что есть разные подходы... но можно ли использовать описанный выше?   -  person Andy    schedule 27.10.2016
comment
Я бы сказал, что не вижу причин для реализации такой логики. Но я думаю, что это в первую очередь вопрос, основанный на мнении, поэтому я отмечу его.   -  person makallio85    schedule 27.10.2016


Ответы (1)


Пока вы все делаете правильно, вам не нужно загружать AppModel в свой контроллер, поскольку он уже должен быть доступен через модель, используемую контроллером. На самом деле вам никогда не следует вызывать AppModel напрямую, так как это предназначено для совместного использования общей логики между моделями, которые должны расширять AppModel.

Таким образом, в вашем AppController вы уже должны иметь доступ к своей функции, объявленной в вашем AppModel, следующим образом: -

$this->{$this->modelClass}->my_function();

В приведенном выше коде {$this->modelClass} определит класс модели, используемый текущим контроллером, чтобы вы могли легко использовать его в своем AppController. Итак, если бы у вас было PagesController, это было бы интерпретировано как $this->Page->my_function().

Если это не сработает для вас, я бы посоветовал вам ошибиться в том, как вы разрабатываете с Cake, и вам нужно изучить, как вы используете свои модели.

person drmonkeyninja    schedule 27.10.2016