1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
componentservice.php
См. документацию.
1<?php
2
3namespace Bitrix\Main\Cli\Command\Make\Service;
4
5use Bitrix\Main\Cli\Command\Make\Service\Component\GenerateDto;
6use Bitrix\Main\Cli\Command\Make\Templates\Component\ClassTemplate;
7use Bitrix\Main\Cli\Command\Make\Templates\Component\LangTemplate;
8use Bitrix\Main\Cli\Command\Make\Templates\Component\TemplateTemplate;
9use Bitrix\Main\Cli\Helper\Renderer;
10use Bitrix\Main\Engine\Response\Converter;
11
13{
14 private Renderer $renderer;
15
16 public function __construct()
17 {
18 $this->renderer = new Renderer();
19 }
20
21 public function generateClassContent(GenerateDto $dto): string
22 {
23 return $this->createClassTemplate($dto)->getContent();
24 }
25
26 public function generateTemplateContent(GenerateDto $dto): string
27 {
28 return $this->createTemplateTemplate($dto)->getContent();
29 }
30
31 public function generateLangContent(GenerateDto $dto): string
32 {
33 return $this->createLangTemplate($dto)->getContent();
34 }
35
36 public function generateClassFile(GenerateDto $dto): void
37 {
38 $fileTemplate = $this->createClassTemplate($dto);
39
40 $filePath = $this->getPathToComponent($dto) . '/class.php';
41
42 $this->renderer->renderToFile($filePath, $fileTemplate);
43 }
44
45 public function generateTemplateFile(GenerateDto $dto): void
46 {
47 $fileTemplate = $this->createTemplateTemplate($dto);
48
49 $filePath = $this->getPathToComponent($dto) . '/templates/.default/template.php';
50
51 $this->renderer->renderToFile($filePath, $fileTemplate);
52 }
53
54 public function generateLangFile(GenerateDto $dto): void
55 {
56 $fileTemplate = $this->createLangTemplate($dto);
57
58 $filePath = $this->getPathToComponent($dto) . '/templates/.default/lang/ru/template.php';
59
60 $this->renderer->renderToFile($filePath, $fileTemplate);
61 }
62
63 public function getPathToComponent(GenerateDto $dto): string
64 {
65 $root = $dto->root ?? (string)$_SERVER['DOCUMENT_ROOT'];
66
67 $bitrixFolder = ($dto->namespace !== 'bitrix' || $dto->local) ? 'local' : 'bitrix';
68 $componentsFolder = $dto->noModule ? 'components' : "modules/$dto->module/install/components";
69
70 return "$root/$bitrixFolder/$componentsFolder/$dto->namespace/$dto->name";
71 }
72
73 #region internal
75 {
76 $className = $this->generateClassName($dto->name);
77
78 return new ClassTemplate(
79 className: $className,
80 );
81 }
82
83 protected function generateClassName(string $name): string
84 {
85 $converter = new Converter(Converter::TO_CAMEL);
86
87 $name = preg_replace('/[.-]/', '_', $name);
88
89 return $converter->process($name) . 'Component';
90 }
91
93 {
94 return new TemplateTemplate(
95 componentTitlePhrase: $this->generateTitlePhrase($dto->name),
96 containerId: $this->generateContainerId($dto->name),
97 extensionName: $dto->name,
98 extensionClass: $this->generateExtensionClass($dto->name),
99 );
100 }
101
103 {
104 return new LangTemplate(
105 componentTitlePhrase: $this->generateTitlePhrase($dto->name),
106 componentTitle: $this->generateTitle($dto->name),
107 );
108 }
109
110 protected function generateTitlePhrase(string $name): string
111 {
112 $converter = new Converter(Converter::TO_UPPER);
113
114 $name = preg_replace('/[.-]/', '_', $name);
115
116 return $converter->process($name) . '_TITLE';
117 }
118
119 protected function generateTitle(string $name): string
120 {
121 $converter = new Converter(Converter::TO_CAMEL);
122
123 $name = preg_replace('/[_-]/', '.', $name);
124
125 return trim(array_reduce(explode('.', $name), fn ($acc, $it) => "$acc " . $converter->process($it)));
126 }
127
128 protected function generateContainerId(string $name): string
129 {
130 return preg_replace('/[._]/', '-', $name);
131 }
132
133 protected function generateExtensionClass(string $name): string
134 {
135 $converter = new Converter(Converter::TO_CAMEL);
136
137 $name = preg_replace('/-/', '_', $name);
138
139 return 'BX' . array_reduce(explode('.', $name), fn ($acc, $it) => "$acc." . $converter->process($it));
140 }
141 #endregion internal
142}
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
$name
Определения menu_edit.php:35