1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
controllerservice.php
См. документацию.
1<?php
2
3namespace Bitrix\Main\Cli\Command\Make\Service;
4
5use Bitrix\Main\Cli\Command\Make\Service\Controller\GenerateDto;
6use Bitrix\Main\Cli\Helper\PathGenerator;
7use Bitrix\Main\Cli\Helper\NamespaceGenerator;
8use Bitrix\Main\Cli\Helper\Renderer;
9use Bitrix\Main\Cli\Command\Make\Templates\ControllerTemplate;
10use Bitrix\Main\Cli\Helper\Renderer\Template;
11use InvalidArgumentException;
12
14{
15 private Renderer $renderer;
16 private NamespaceGenerator $namespaceGenerator;
17 private string $defaultRootFolder;
18
19 public function __construct()
20 {
21 $this->renderer = new Renderer();
22 $this->namespaceGenerator = new NamespaceGenerator();
23 $this->defaultRootFolder = (string)$_SERVER['DOCUMENT_ROOT'];
24 }
25
26 public function generateContent(GenerateDto $dto): string
27 {
28 return $this->getTemplate($dto)->getContent();
29 }
30
31 public function generateFile(GenerateDto $dto): void
32 {
33 $fileTemplate = $this->getTemplate($dto);
34
35 $pathGenerator = new PathGenerator(
36 $dto->psr4,
37 $dto->rootFolder ?: $this->defaultRootFolder,
38 );
39
40 $namespace = $this->generateNamespace($dto);
41 $className = $this->normalizeControllerName($dto->name);
42
43 $filePath = $pathGenerator->generatePathToClass($namespace, $className);
44
45 $this->renderer->renderToFile($filePath, $fileTemplate);
46 }
47
48 #region internal
49
50 private function generateNamespace(GenerateDto $dto): string
51 {
52 $namespace = $dto->namespace;
53 if (empty($namespace))
54 {
55 $moduleId = $dto->moduleId;
56 if (empty($moduleId))
57 {
58 throw new InvalidArgumentException('If namespace option is not set, module argument MUST BE set!');
59 }
60
61 $namespace = $this->namespaceGenerator->generateNamespaceForModule($moduleId, 'Controller');
62 }
63
64 return $namespace;
65 }
66
67 private function normalizeControllerName(string $name): string
68 {
69 $name = preg_replace('/Controller$/i', '', $name);
70 if (empty($name))
71 {
72 throw new InvalidArgumentException('Invalid controller name');
73 }
74
75 return ucfirst($name);
76 }
77
78 private function getTemplate(GenerateDto $dto): Template
79 {
80 $namespace = $this->generateNamespace($dto);
81 $className = $this->normalizeControllerName($dto->name);
82
83 return new ControllerTemplate($className, $namespace, $dto->moduleId, $dto->alias, $dto->actions);
84 }
85
86 #endregion internal
87}
$moduleId
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
$name
Определения menu_edit.php:35