[CakePHP] Получить доступ к данным модели из любого котроллера

cake-logoДанная рекомендация поможет Вам, если вы используете в своей разработке фреймворк CakePHP.

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

Например. Вы хотите хранить в базе данных параметры вашего приложения (модель «Cоnfig»), а видеть эти параметры должны почти все контроллеры.

Делается это следующим образом, при помощи функции loadModel.

Из описания функции:
Controller::loadModel(string $modelClass, mixed $id)
Функция loadModel приходит на помощь, когда вам нужно использовать модель, не являющуюся связанной моделью либо моделью контроллера по умолчанию.

<?php

  App::import('Controller');

  class ReportsController extends AppController {

    // Свойство для хранения параметров
    public $config = array();

    public function beforeFilter() {
	parent::beforeFilter();

	// Загружаем модель Config
	$this->loadModel('Config');
	// Запрашиваем данные из модели
	$config = $this->Config->find('all');
	foreach ($config as $k => $v) {
		$this->config[$v['Config']['param_name']] = $v['Config']['param_value'];
	}
    } 

  }
?>

Альтернативный вариант, может помочь если вам нужно просто прочитать данные из любой таблицы в БД, ну и вообще выполнить любой запрос:

<?php

  App::import('Controller');

  class ReportsController extends AppController {

    // Свойство для хранения параметров
    public $config = array();

    public function beforeFilter() {
	parent::beforeFilter();

	// Выполняем запрос к таблице Config
	$config = $this->Report->query("SELECT param_name, param_value FROM `config` Config");
	foreach ($config as $k => $v) {
		$this->config[$v['Config']['param_name']] = $v['Config']['param_value'];
	}
    } 

  }
?>

Comments are closed