Сервис-провайдеры представляют из себя класс, который является наследником контроллера.
Основная задача сервис-провайдера: поставлять услуги контроллера в другие части приложения.
Пример внедрения
Необходимо реализовать блок с популярными товарами. Этот блок будет подключаться в нескольких частях сайта.
Создаем сервис провайдер:
/Project/incl/ServicesProviders/SelectedProductsServiceProvider.php
<?
defined('PROLOGUE__FRAMEWORK') or die ;
Class SelectedProductsServiceProvider extends PrController {
public function __construct() {
}
public function getProducts() {
$this -> model('PrCatalogKatalogTovarov');
$elements = $this -> PrCatalogKatalogTovarov -> where(['rating>' => 4]) -> limit(10) -> getRecords();
if (!$elements) {
return [];
}
foreach ($elements as $element) {
$arData[] = $element;
}
return $arData;
}
}
Теперь созданим view компонент:
/Project/views/components/catalog/selectedProducts.php
<?
defined('PROLOGUE__FRAMEWORK') or die ;
$title = $displayArData['title'];
$selectedProductsServiceProvider = new SelectedProductsServiceProvider;
$products = $selectedProductsServiceProvider -> getProducts();
?>
<? if($products) { ?>
<section class="newproduct bgwhite p-t-45 p-b-105">
<div class="container">
<div class="sec-title p-b-60">
<h3 class="m-text5 t-center"><?=$title?></h3>
</div>
<div class="wrap-slick2">
<div class="slick2">
<? foreach($products as $product) { ?>
<div class="item-slick2 p-l-15 p-r-15">
<? include Pr::BuildPath('/Project/views/components/catalog/elementInList.php', true) ?>
</div>
<? } ?>
</div>
</div>
</div>
</section>
<? } ?>
Теперь можно подключать компонент в любом месте на сайте
<? $this -> display('/Project/views/components/catalog/selectedProducts', ['title' => 'Новые поступления']) ?>