Для того, чтобы обеспечить возможность использовать однотипный функционал в разных контроллерах - используются компоненты.
Компоненты располагаются в:
- /Prologue/components/ - встроенные компоненты
- /Progect/components/ - глобальные пользовательские компоненты
- /WORKSPACE/components/ - локальные пользовательские компоненты которые доступны только в текущем WORKSPACE
Создание компонента
Создадим тестовый компонент /Project/components/test/myComponent.php
Содержимое:
/php
/**
* @var array $arData - массив входящих данных
* @var object $this - контекст контроллера
* @var string $componentSpace - область хранения компонента Project / WORKSPACE
*/
defined('PROLOGUE__FRAMEWORK') or die;
/* Подключаем js скрипт */
$this->js($componentSpace . 'components/test/script.js');
/* Экспортируем $message в view */
$this->view->message = $this->lang('basic.textHelloWorld');
/* Получаем активных пользователей с нужными полями*/
$this->model('Users');
$users = $this
->Users
->fl(['name', 'email'])
->where(['state=' => 1])
->getRecords();
/* Заполняем объект который нужно вернуть при подключении компонента*/
$this->cResult(
[
'users' => $users,
]
);
Подключение компонента в контроллере
Компоненты подключаются в контроллерах с помощью метода component()
Простое подключение компонента в поток
$this -> component('test/myComponent');
В этом примере компонент подключится, выполнится, экспортирует данные в view, но ничего не вернет.
Подключение компонента и извлечение данных из cResult()
$users = $this
->component('test/myComponent')
->cResult()->users;
В данном случае вернется массив пользователей который мы доставали из базы.
Подключение компонента с передачей параметров в него
$this->component('test/myComponent',
[
'userId' => 1,
'message' => $this->message('basic.textHelloWorld'),
]);
В компоненте станет доступным массив $arData [userId,message]