ApiRenderer.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. /**
  3. * @link http://www.yiiframework.com/
  4. * @copyright Copyright (c) 2008 Yii Software LLC
  5. * @license http://www.yiiframework.com/license/
  6. */
  7. namespace yii\apidoc\templates\online;
  8. use yii\apidoc\models\TypeDoc;
  9. use Yii;
  10. use yii\helpers\Console;
  11. /**
  12. *
  13. * @author Carsten Brandt <mail@cebe.cc>
  14. * @since 2.0
  15. */
  16. class ApiRenderer extends \yii\apidoc\templates\html\ApiRenderer
  17. {
  18. public $layout = false;
  19. public $indexView = '@yii/apidoc/templates/online/views/index.php';
  20. /**
  21. * @inheritdoc
  22. */
  23. public function render($context, $targetDir)
  24. {
  25. parent::render($context, $targetDir);
  26. if ($this->controller !== null) {
  27. $this->controller->stdout("writing packages file...");
  28. }
  29. $packages = [];
  30. $notNamespaced = [];
  31. foreach (array_merge($context->classes, $context->interfaces, $context->traits) as $type) {
  32. /* @var $type TypeDoc */
  33. if (empty($type->namespace)) {
  34. $notNamespaced[] = str_replace('\\', '-', $type->name);
  35. } else {
  36. $packages[$type->namespace][] = str_replace('\\', '-', $type->name);
  37. }
  38. }
  39. ksort($packages);
  40. $packages = array_merge(['Not namespaced' => $notNamespaced], $packages);
  41. foreach ($packages as $name => $classes) {
  42. sort($packages[$name]);
  43. }
  44. file_put_contents($targetDir . '/packages.txt', serialize($packages));
  45. if ($this->controller !== null) {
  46. $this->controller->stdout('done.' . PHP_EOL, Console::FG_GREEN);
  47. }
  48. }
  49. /**
  50. * @inheritdoc
  51. */
  52. public function generateApiUrl($typeName)
  53. {
  54. return strtolower(str_replace('\\', '-', $typeName));
  55. }
  56. /**
  57. * @inheritdoc
  58. */
  59. protected function generateFileName($typeName)
  60. {
  61. return $this->generateApiUrl($typeName) . '.html';
  62. }
  63. }