t1h_on
@t1h_on
Да и нечего писать даже_

Динамические namespace в Yii2, реализация?

Всем привет есть проект на Yii2 со структурой:

Модули
---- Компания 1
---- Компания 2

Вопрос заключается в namespace, а именно: Если подключается компания, я клонирую Компания 1 и создаю Компания 3
но вот в namespace все равно остается namespace com\modules\Компания 1;
Как можно динамически изменить namespace на namespace com\modules\Компания 3; ?

Может у кого то есть другие решения этой проблемы....
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
t1h_on
@t1h_on Автор вопроса
Да и нечего писать даже_
Решил проблему так: Есть модуль основной и его мы будем клонировать, собрал из просторов интернета код для этих целей:

public function actionCopy(
        $basePath = '/OSPanel/domains/КаталогДомена/company/modules/',
        $source = 'Компания 1',
        $dest = 'Компания 2',
        $overwrite = true,
        $sourcestr = 'Компания 1',
        $deststr = 'Компания 2'
    )
    {
        //Давайте просто убедимся, что наша новая папка уже создана.
        if (!is_dir($basePath . $dest))
            mkdir($basePath . $dest);
        if ($handle = opendir($basePath . $source)) {     
            while (false !== ($file = readdir($handle))) { 
                if ($file != '.' && $file != '..') {
                    $path = $source . '/' . $file;
                    $pathNew = $basePath . $dest . '/' . $file;

                    if (is_file($basePath . $path)) {

                        if (!is_file($basePath . $dest . '/' . $file) || $overwrite) {
                            if (!@copy($basePath . $path, $basePath . $dest . '/' . $file)) {
                                echo '<font color="red">File (' . $path . ') could not be copied, likely a permissions problem.</font>';
                            }
                            $this->strFile($sourcestr, $deststr, $pathNew);
                        }
                    } elseif (is_dir($basePath . $path)) {
                        if (!is_dir($basePath . $dest . '/' . $file))
                            mkdir($basePath . $dest . '/' . $file); // создать подкаталог перед копированием подкаталога

                        $this->actionCopy($basePath, $path, $dest . '/' . $file, $overwrite, $sourcestr, $deststr); //рекурсия!
                    }
                }
            }
            closedir($handle);
        }
    }
    
    public function strFile($oldstr, $newstr, $yourfile)
    {
        $file = file($yourfile);
        echo 'Открыли файл ' . $yourfile.' ';

        if (is_array($file)) {
            foreach ($file as $key => $value) {
               $file[$key] = preg_replace('/'.$oldstr.'/', $newstr, $value);
            }
        } else {
            exit ("Ошибка");
        }
        $fp = fopen($yourfile, "w+"); // перезаписываем независимо от длины новой строки
        fwrite($fp, implode("", $file));
        fclose($fp);
    }


Копируется Компания 1 в Компания 2 и файл который копируется проверяется на Компания 1 и Заменяет на Компания 2

1. Если у кого есть код что бы копировать базу данных
2. Подключение модуля в файл (не вручную)

Буду рад за код))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@maksim_fix
Junior PHP developer
В современных IDE есть функция замены, просто выберете нужный каталог, и замените Компания 1 на Компания 2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы