jeyroik / extas-terms
Provides terms models
Installs: 83
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/jeyroik/extas-terms
Requires
Requires (Dev)
This package is auto-updated.
Last update: 2025-09-21 23:23:11 UTC
README
Описание
Пакет предоставляет модель для работы с термами (слагаемыми).
Терм - именованный вычисляемый параметр.
Использование
Получаем список термов:
use \extas\interfaces\terms\ITerm; $terms = $this->terms()->all([ITerm::FIELD__TAGS => 'some.tag']);
Получаем список калькуляторов:
use extas\interfaces\terms\ITermCalculatorDescription; $calculators = $this->termsCalculators()->all();
Вычисляем термы:
use extas\interfaces\terms\ITerm; use extas\interfaces\terms\ITermCalculatorDescription; use extas\interfaces\terms\ITermCalculationResult; use extas\interfaces\terms\ITermCalculator; /** * @var ITerm[] $terms * @var ITermCalculatorDescription[] $calculators */ $calculated = []; foreach ($calculators as $calculatorDescription) { /** * @var ITermCalculationResult $result * @var ITermCalculator $calculator */ $calculator = $calculatorDescription->buildClassWithParameters([]); $result = $calculator->calculateTerms($terms, ['some' => 'args']); /** * Or you can just * $result = $calculatorDescription->runWithParameters([], 'calculateTerms', $terms); */ /** * You should iterate terms if you need to pass different arguments to each of them: * foreach($terms as $terms) { * if ($calculator->canCalculate($term, ['some1' => 'arg1'])) { * $calculated[] = $calculator->calculateTerm($term, ['some1' => 'arg1']); * } * } */ $calculated = array_merge($calculated, $result->getCalculatedTerms()); $terms = array_column($result->getSkippedTerms(), ITermCalculationResult::SKIPPED__TERM); if (empty($terms)) { break; } }