Сервис провайдеры

Александр Д.
28/09/2018

Сервис-провайдеры представляют из себя класс, который является наследником контроллера.

Основная задача сервис-провайдера: поставлять услуги контроллера в другие части приложения.

Документация

Пример внедрения

Необходимо реализовать блок с популярными товарами. Этот блок будет подключаться в нескольких частях сайта.

Создаем сервис провайдер:

/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' => 'Новые поступления']) ?>