yii\apidoc\commands\ApiController::actionIndex PHP Method

actionIndex() public method

Renders API documentation files
public actionIndex ( array $sourceDirs, string $targetDir ) : integer
$sourceDirs array
$targetDir string
return integer
    public function actionIndex(array $sourceDirs, $targetDir)
    {
        $renderer = $this->findRenderer($this->template);
        $targetDir = $this->normalizeTargetDir($targetDir);
        if ($targetDir === false || $renderer === false) {
            return 1;
        }
        $renderer->apiUrl = './';
        $renderer->guidePrefix = $this->guidePrefix;
        if ($this->pageTitle !== null) {
            $renderer->pageTitle = $this->pageTitle;
        }
        // setup reference to guide
        if ($this->guide !== null) {
            $renderer->guideUrl = $guideUrl = $this->guide;
        } else {
            $guideUrl = './';
            $renderer->guideUrl = $targetDir;
            if (file_exists($renderer->generateGuideUrl('README.md'))) {
                $renderer->guideUrl = $guideUrl;
            } else {
                $renderer->guideUrl = null;
            }
        }
        // search for files to process
        if (($files = $this->searchFiles($sourceDirs)) === false) {
            return 1;
        }
        // load context from cache
        $context = $this->loadContext($targetDir);
        $this->stdout('Checking for updated files... ');
        foreach ($context->files as $file => $sha) {
            if (!file_exists($file)) {
                $this->stdout('At least one file has been removed. Rebuilding the context...');
                $context = new Context();
                if (($files = $this->searchFiles($sourceDirs)) === false) {
                    return 1;
                }
                break;
            }
            if (sha1_file($file) === $sha) {
                unset($files[$file]);
            }
        }
        $this->stdout('done.' . PHP_EOL, Console::FG_GREEN);
        // process files
        $fileCount = count($files);
        $this->stdout($fileCount . ' file' . ($fileCount == 1 ? '' : 's') . ' to update.' . PHP_EOL);
        Console::startProgress(0, $fileCount, 'Processing files... ', false);
        $done = 0;
        foreach ($files as $file) {
            $context->addFile($file);
            Console::updateProgress(++$done, $fileCount);
        }
        Console::endProgress(true);
        $this->stdout('done.' . PHP_EOL, Console::FG_GREEN);
        // save processed data to cache
        $this->storeContext($context, $targetDir);
        $this->updateContext($context);
        // render models
        $renderer->controller = $this;
        $renderer->render($context, $targetDir);
        if (!empty($context->errors)) {
            ArrayHelper::multisort($context->errors, 'file');
            file_put_contents($targetDir . '/errors.txt', print_r($context->errors, true));
            $this->stdout(count($context->errors) . " errors have been logged to {$targetDir}/errors.txt\n", Console::FG_RED, Console::BOLD);
        }
        if (!empty($context->warnings)) {
            ArrayHelper::multisort($context->warnings, 'file');
            file_put_contents($targetDir . '/warnings.txt', print_r($context->warnings, true));
            $this->stdout(count($context->warnings) . " warnings have been logged to {$targetDir}/warnings.txt\n", Console::FG_YELLOW, Console::BOLD);
        }
    }