Изменение механизма выдачи товаров
Введение
За выдачу товаров игроку в L-Shop отвечают, так называемые, дистрибьюторы (Distributor). По сути, дистрибьютор - это класс, который инкапсулирует логику выдачи. Каждый такой класс должен реализовывать интерфейс App\Services\Purchasing\Distributors\Distributor.
Ход
Для того, чтобы реализовать механизм, отличный от стандартных вам необходимо:
Создать класс и имплементировать интерфейс
App\Services\Purchasing\Distributors\Distributor
.Написать реализацию метода
distribute()
. Этот метод принимает объект типаApp\Entity\Distribution
который представляет сущность, выдаваемую игроку.
Если ваша реализация дистрибьютора подразумевает возможность ручной выдачи (примером такого может служить встроенный
App\Services\Purchasing\Distributors\RconDistributor
), класс дистрибьютора должен так же имплементировать интерфейсApp\Services\Purchasing\Distributors\Attempting
, у которого отсутствуют методы. Интерфейс является своеобразным маркером.Зарегистрировать новоиспеченного distributor'а, дабы приложение "узнало" о его существовании.
Перейдите в файл
/config/purchasing.php
.Добавьте полное имя класса нового distributor'а в элемент массива
distribution.distributors
.
Сбросьте кэш приложения, дабы новая конфигурация закэшировалась.
Спецификация
Ключевые слова "ДОЛЖЕН”, “НЕ ДОЛЖЕН”, “ ТРЕБУЕТСЯ”, “СЛЕДУЕТ”, “НЕ СЛЕДУЕТ”, “РЕКОМЕНДУЕТСЯ”, “МОЖЕТ” должны интерпретироваться так же, как описано в RFC 2119.
Класс дистрибьютора ДОЛЖЕН реализовывать интерфейс
App\Services\Purchasing\Distributors\Distributor
.Класс дистрибьютора МОЖЕТ реализовывать интерфейс
App\Services\Purchasing\Distributors\Attempting
в случае, если реализация дистрибьютора подразумевает возможность ручной выдачи товаров игроку.РЕКОМЕНДУЕТСЯ добавлять к имени класса суффикс Distributor, дабы класс дистрибьютора можно было идентифицировать по названию.
РЕКОМЕНДУЕТСЯ помещать дистрибьюторы в неймспейс
App\Services\Purchasing\Distributors
.Реализация метода
distribute()
ДОЛЖНА содержать логику выдачи товаров игроку.В случае возникновения ошибки, которую дистрибьютор не в состоянии обработать самостоятельно, необходимо выбросить исключение типа
App\Exceptions\Distributor\DistributionException
.
Last updated