Введение в компоненты. Пример компонента.

search

Для того, чтобы обеспечить возможность использовать однотипный функционал в разных контроллерах - используются компоненты.

Компоненты располагаются в:

  • /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]

© 2015 - 2018