public function generate() { if ($this->singularEntities) { $this->modelClass = Inflector::singularize($this->modelClass); $this->controllerClass = Inflector::singularize(substr($this->controllerClass, 0, strlen($this->controllerClass) - 10)) . "Controller"; $this->searchModelClass = Inflector::singularize($this->searchModelClass); } $testFiles = []; $baseControllerFile = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->controllerClass, '\\')) . '.php'); $baseControllerFile = StringHelper::dirname($baseControllerFile) . '/base/' . StringHelper::basename($baseControllerFile); $files[] = new CodeFile($baseControllerFile, $this->render('controller.php')); $params['controllerClassName'] = \yii\helpers\StringHelper::basename($this->controllerClass); $controllerFile = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->controllerClass, '\\')) . '.php'); if ($this->generateControllerClass || !is_file($controllerFile)) { $files[] = new CodeFile($controllerFile, $this->render('controller-extended.php', $params)); } $restControllerFile = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->controllerClass, '\\')) . '.php'); if ($this->generateControllerClass || !is_file($restControllerFile)) { $restControllerFile = StringHelper::dirname($restControllerFile) . '/api/' . StringHelper::basename($baseControllerFile); $files[] = new CodeFile($restControllerFile, $this->render('controller-rest.php', $params)); } if (!empty($this->searchModelClass)) { $searchModel = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->searchModelClass, '\\') . '.php')); $files[] = new CodeFile($searchModel, $this->render('search.php')); } $viewPath = $this->getViewPath(); $templatePath = $this->getTemplatePath() . '/views'; foreach (scandir($templatePath) as $file) { if (empty($this->searchModelClass) && $file === '_search.php') { continue; } if (is_file($templatePath . '/' . $file) && pathinfo($file, PATHINFO_EXTENSION) === 'php') { $files[] = new CodeFile("{$viewPath}/{$file}", $this->render("views/{$file}")); } } if ($this->generateTests) { $tg = new TestGenerator(); $tg->template = 'default'; $tg->modelClass = $this->modelClass; $tg->controllerClass = $this->controllerClass; $tg->searchModelClass = $this->searchModelClass; $tg->ns = $this->testsPath; $testFiles = $tg->generate(); } return array_merge($files, $testFiles); }