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);
}