예제 #1
0
 /**
  * @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;
 }