/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/components/base/BaseFileGenerator.php
127 строк
3 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\components\base; use Yii; use yii\base\InvalidCallException; use yii\base\InvalidConfigException; /** * Базовый класс для генерации файлов * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2020 */ abstract class BaseFileGenerator extends BaseGenerator { /** * Путь к результирующему файлу генерации отчёта * @var null */ protected $tmp_path = null; /** * Путь к шаблону если предусмотрено * @var null|string */ protected $template; /** * @inheritdoc * @throws InvalidConfigException */ protected function beforeGenerate() { set_time_limit(0); parent::beforeGenerate(); $this->tmp_path = null; return $this->load(); } /** * Деструктор */ public function __destruct() { // TODO: Implement __destruct() method. // Удаление временного файла @unlink($this->tmp_path); } /** * @inheritdoc */ protected function afterGenerate($result) { parent::afterGenerate($result); if ($result) { $this->save(); } } /** * Проверяем существование файла шаблона и инициализируем writer. * * @return bool * @throws InvalidConfigException */ protected function load() { if ($this->template) { $this->template = Yii::getAlias($this->template); if (!is_file($this->template)) { throw new InvalidConfigException(Yii::t('app', 'Шаблон не был указан или не существует!')); } } return true; } /** * Сохранение результата работы на жёсткий диск * * @return mixed */ abstract protected function save(); /** * Получить расширение шаблона * * @return mixed|null */ protected function getExtension() { if ($this->template) { return pathinfo($this->template, PATHINFO_EXTENSION); } else { return null; } } /** * Возвращает временный файл для записи. * * @return string */ protected function getTempFileName() { $path = tempnam(sys_get_temp_dir(), (string)time()) . '.' . $this->getExtension(); if (false === $path) { throw new InvalidCallException(Yii::t('app', 'Ошибка генерации временного файла')); } return $path; } /** * Получить путь * @return |null */ public function getOutput() { return $this->tmp_path; } }