• Yii2 Есть ли какие-то инструменты для автоматического подключения ресурсов?

    @Yii2SlowMoooo Автор вопроса
    Задача очень второстепенная, по этому прошу всех желающих причесать мой результат)).
    Пока вышел из ситуации так.
    Добавил класс assets/AutoAsset.php :
    <?php
    
    namespace backend\assets;
    use Yii;
    
    /**
     * Class AutoAsset
     * Класс автоматически подключает к представлению модуля файлы ресурсов JS и CSS
     * По умолчанию путь к автоматически подключаемым ресурсам
     * @web/auto_asset/modules/{moduleName}/{viewName}/*.[js | Css]
     * Для подключения в представлении вызываем: AutoAsset::registerFiles($this)
     *
     * @author
     */
    class AutoAsset
    {
        public static $baseUrl = 'auto_asset/modules';
    
        /**
         * Формируем путь к ресурсам и подключаем все *.js и *.css фаилы в объекте $view
         * У всех зависимость от jQuery
         *
         * @param $view
         */
        public static function register($view) 
        {
            $viewFile = explode(DIRECTORY_SEPARATOR, $view->getViewFile());
            $viewFile = end($viewFile);
            $filePath =
                self::$baseUrl . "/" .
                Yii::$app->controller->module->id . "/" .
                str_replace(".php", "", $viewFile) . "/";
    
            // TODO Причесать монстра $realDirPath;
            $realDirPath = Yii::getAlias('@webroot') . DIRECTORY_SEPARATOR . self::$baseUrl . DIRECTORY_SEPARATOR . Yii::$app->controller->module->id . DIRECTORY_SEPARATOR . str_replace(".php", "", $viewFile) . DIRECTORY_SEPARATOR;
    
            $dir=opendir($realDirPath);
            while ($file = readdir($dir)){
                if (strstr($file, ".js")) {
                    $view->registerJsFile($filePath . $file ,['depends' => [\yii\web\JqueryAsset::className()]]);
                } elseif (strstr($file, ".css")) {
                    $view->registerCSSFile($filePath . $file ,['depends' => [\yii\web\JqueryAsset::className()]]);
                }
            }
            closedir($dir);
    
        }
    }


    PS прошу прощения за коменты в кирилице, требование компании...
    Ответ написан
    Комментировать