/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/traits/FactoryTrait.php
92 строки
2 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\traits; use Yii; use yii\helpers\ArrayHelper; use yii\web\NotFoundHttpException; /** * Трейт для работы с фабрикой классов * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2019 */ trait FactoryTrait { /** * Имя класса * @var null */ public $class = null; /** * Преобразовать имя класса в URL параметр * @return string */ public static function classNameUrl() { return urlencode(base64_encode(self::className())); } /** * Получить название класса из хеша * @param $hash * * @return string */ public static function classNameFromHash($hash) { return base64_decode(urldecode($hash)); } /** * Преобразовать массив ИД в GET параметр для select2 * @param array $ids * @return string */ public static function idToUrl($ids = []) { return urlencode(base64_encode(implode(',', $ids))); } /** * Список параметров, которые можно принимать через HTTP_GET запрос * @return array */ public static function getAllowParams() { return []; } /** * Фабрика по созданию класса из хэша имени класса * * @param $classHash * @param array $params * @return object * @throws NotFoundHttpException * @throws \yii\base\InvalidConfigException */ public static function factory($classHash, $params = []) { $className = self::classNameFromHash($classHash); if (!class_exists($className)) { throw new NotFoundHttpException(Yii::t('app', 'Класс «{class}» не найден', ['class' => $className])); } $allow = $className::getAllowParams(); if (count($allow) > 0) { $trust = []; foreach ($allow as $key) { $trust[$key] = ArrayHelper::getValue($params, '0.' . $key); } $trust = [$trust]; } else { $trust = $params; } return Yii::createObject($className, $trust); } }