/** * @param string $checkingClass * @return array */ public static function getTypeObjects($checkingClass = null) { $checkingClass = in_array($checkingClass, [static::DISCOUNT_CHECKING_ORDER, static::DISCOUNT_CHECKING_ORDER_ITEM]) ? $checkingClass : null; $cacheKey = 'Discount_TypeObjects' . $checkingClass; if (false === ($result = Yii::$app->cache->get($cacheKey))) { $types = DiscountType::find()->select(['class'])->where(['active' => 1])->orderBy(['sort_order' => SORT_ASC, 'id' => SORT_ASC]); if (null !== $checkingClass) { $types->andWhere(['checking_class' => $checkingClass]); } $result = array_reduce($types->asArray()->all(), function ($result, $item) { $className = $item['class']; if (is_subclass_of($className, '\\app\\modules\\shop\\models\\AbstractDiscountType')) { $result[] = new $className(); } return $result; }, []); if (empty($result)) { return $result; } Yii::$app->cache->set($cacheKey, $result, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(DiscountType::className())]])); } return $result; }