Bitrix-D7  20.0.0
Класс Loader

Открытые статические члены

static includeModule ($moduleName)
 Includes module by its name. Подробнее...
 
static requireModule ($moduleName)
 Includes module by its name, throws an exception in case of failure. Подробнее...
 
static includeSharewareModule ($moduleName)
 Includes shareware module by its name. Подробнее...
 
static clearModuleCache ($moduleName)
 
static getDocumentRoot ()
 Returns document root. Подробнее...
 
static switchAutoLoad ($value=true)
 
static registerAutoLoadClasses ($moduleName, array $arClasses)
 Registers classes for auto loading. Подробнее...
 
static registerNamespace ($namespace, $module, $path)
 Registers namespaces with custom paths. Подробнее...
 
static registerHandler (callable $handler)
 
static isAutoLoadClassRegistered ($className)
 
static autoLoad ($className)
 \Bitrix\Main\IO\File -> /main/lib/io/file.php \Bitrix\IBlock\Type -> /iblock/lib/type.php \Bitrix\IBlock\Section\Type -> /iblock/lib/section/type.php \QSoft\Catalog\Tools\File -> /qsoft.catalog/lib/tools/file.php Подробнее...
 
static getLocal ($path, $root=null)
 Checks if file exists in /local or /bitrix directories. Подробнее...
 
static getPersonal ($path)
 Checks if file exists in personal directory. Подробнее...
 
static setRequireThrowException ($requireThrowException)
 Changes requireModule behavior. Подробнее...
 

Поля данных

const SAFE_MODE = false
 Can be used to prevent loading all modules except main and fileman. Подробнее...
 
const BITRIX_HOLDER = "bitrix"
 
const LOCAL_HOLDER = "local"
 
const MODULE_NOT_FOUND = 0
 Returned by includeSharewareModule() if module is not found. Подробнее...
 
const MODULE_INSTALLED = 1
 Returned by includeSharewareModule() if module is installed. Подробнее...
 
const MODULE_DEMO = 2
 Returned by includeSharewareModule() if module works in demo mode. Подробнее...
 
const MODULE_DEMO_EXPIRED = 3
 Returned by includeSharewareModule() if the trial period is expired. Подробнее...
 
const ALPHA_LOWER = "qwertyuioplkjhgfdsazxcvbnm"
 
const ALPHA_UPPER = "QWERTYUIOPLKJHGFDSAZXCVBNM"
 

Подробное описание

См. определение в файле main/lib/loader.php строка 8

Методы

◆ autoLoad()

static autoLoad (   $className)
static

\Bitrix\Main\IO\File -> /main/lib/io/file.php \Bitrix\IBlock\Type -> /iblock/lib/type.php \Bitrix\IBlock\Section\Type -> /iblock/lib/section/type.php \QSoft\Catalog\Tools\File -> /qsoft.catalog/lib/tools/file.php

Аргументы
$className

См. определение в файле main/lib/loader.php строка 309

310  {
311  $file = ltrim($className, "\\"); // fix web env
312  $file = strtr($file, static::ALPHA_UPPER, static::ALPHA_LOWER);
313 
314  static $documentRoot = null;
315  if ($documentRoot === null)
316  $documentRoot = static::getDocumentRoot();
317 
318  if (isset(self::$arAutoLoadClasses[$file]))
319  {
320  $pathInfo = self::$arAutoLoadClasses[$file];
321  if ($pathInfo["module"] != "")
322  {
323  $m = $pathInfo["module"];
324  $h = isset(self::$arLoadedModulesHolders[$m]) ? self::$arLoadedModulesHolders[$m] : 'bitrix';
325  include_once($documentRoot."/".$h."/modules/".$m."/" .$pathInfo["file"]);
326  }
327  else
328  {
329  require_once($documentRoot.$pathInfo["file"]);
330  }
331 
332  if (class_exists($className))
333  {
334  return;
335  }
336  }
337 
338  if (preg_match("#[^\\\\/a-zA-Z0-9_]#", $file))
339  return;
340 
341  $tryFiles = [$file];
342 
343  if (substr($file, -5) == "table")
344  {
345  // old *Table stored in reserved files
346  $tryFiles[] = substr($file, 0, -5);
347  }
348 
349  foreach ($tryFiles as $file)
350  {
351  $file = str_replace('\\', '/', $file);
352  $arFile = explode("/", $file);
353 
354  if ($arFile[0] === "bitrix")
355  {
356  array_shift($arFile);
357 
358  if (empty($arFile))
359  break;
360 
361  $module = array_shift($arFile);
362  if ($module == null || empty($arFile))
363  break;
364  }
365  else
366  {
367  $module1 = array_shift($arFile);
368  $module2 = array_shift($arFile);
369 
370  if ($module1 == null || $module2 == null || empty($arFile))
371  {
372  break;
373  }
374 
375  $module = $module1.".".$module2;
376  }
377 
378  if (!isset(self::$arLoadedModulesHolders[$module]))
379  break;
380 
381  $filePath = $documentRoot."/".self::$arLoadedModulesHolders[$module]."/modules/".$module."/lib/".implode("/", $arFile).".php";
382 
383  if (file_exists($filePath))
384  {
385  require_once $filePath;
386  break;
387  }
388  else
389  {
390  // try namespaces with custom path
391  foreach (static::$customNamespaces as $namespace => $namespacePath)
392  {
393  if (strpos($className, $namespace) === 0)
394  {
395  // found
396  $fileParts = explode("/", $file);
397 
398  // cut base namespace
399  for ($i=0; $i <= substr_count($namespace, '\\'); $i++)
400  {
401  array_shift($fileParts);
402  }
403 
404  // final path
405  $filePath = $namespacePath.'/'.implode("/", $fileParts).".php";
406 
407  if (file_exists($filePath))
408  {
409  require_once $filePath;
410  break 2;
411  }
412  }
413  }
414  }
415  }
416 
417  // still not found, check additional handlers
418  if (!class_exists($className) && !empty(static::$additionalHandlers))
419  {
420  foreach (static::$additionalHandlers as $handler)
421  {
422  call_user_func($handler, $className);
423 
424  if (class_exists($className))
425  {
426  break;
427  }
428  }
429  }
430  }

◆ clearModuleCache()

static clearModuleCache (   $moduleName)
static

См. определение в файле main/lib/loader.php строка 178

179  {
180  if (!is_string($moduleName) || $moduleName == "")
181  throw new LoaderException("Empty module name");
182 
183  if($moduleName !== "main")
184  {
185  unset(static::$arLoadedModules[$moduleName]);
186  unset(static::$arLoadedModulesHolders[$moduleName]);
187  }
188 
189  if (isset(static::$arSharewareModules[$moduleName]))
190  unset(static::$arSharewareModules[$moduleName]);
191  }

◆ getDocumentRoot()

static getDocumentRoot ( )
static

Returns document root.

Возвращает
string Document root

См. определение в файле main/lib/loader.php строка 198

199  {
200  static $documentRoot = null;
201  if ($documentRoot === null)
202  $documentRoot = rtrim($_SERVER["DOCUMENT_ROOT"], "/\\");
203  return $documentRoot;
204  }

◆ getLocal()

static getLocal (   $path,
  $root = null 
)
static

Checks if file exists in /local or /bitrix directories.

Аргументы
string$pathFile path relative to /local/ or /bitrix/
string$rootServer document root, default static::getDocumentRoot()
Возвращает
string|bool Returns combined path or false if the file does not exist in both dirs

См. определение в файле main/lib/loader.php строка 439

440  {
441  if ($root === null)
442  $root = static::getDocumentRoot();
443 
444  if (file_exists($root."/local/".$path))
445  return $root."/local/".$path;
446  elseif (file_exists($root."/bitrix/".$path))
447  return $root."/bitrix/".$path;
448  else
449  return false;
450  }

◆ getPersonal()

static getPersonal (   $path)
static

Checks if file exists in personal directory.

If $_SERVER["BX_PERSONAL_ROOT"] is not set than personal directory is equal to /bitrix/

Аргументы
string$pathFile path relative to personal directory
Возвращает
string|bool Returns combined path or false if the file does not exist

См. определение в файле main/lib/loader.php строка 459

460  {
461  $root = static::getDocumentRoot();
462  $personal = isset($_SERVER["BX_PERSONAL_ROOT"]) ? $_SERVER["BX_PERSONAL_ROOT"] : "";
463 
464  if (!empty($personal) && file_exists($root.$personal."/".$path))
465  return $root.$personal."/".$path;
466 
467  return self::getLocal($path, $root);
468  }

◆ includeModule()

static includeModule (   $moduleName)
static

Includes module by its name.

Аргументы
string$moduleNameName of the included module
Возвращает
bool Returns true if module was included successfully, otherwise returns false
Исключения
LoaderException

См. определение в файле main/lib/loader.php строка 70

71  {
72  if (!is_string($moduleName) || $moduleName == "")
73  throw new LoaderException("Empty module name");
74  if (preg_match("#[^a-zA-Z0-9._]#", $moduleName))
75  throw new LoaderException(sprintf("Module name '%s' is not correct", $moduleName));
76 
77  $moduleName = strtr($moduleName, static::ALPHA_UPPER, static::ALPHA_LOWER);
78 
79  if (self::SAFE_MODE)
80  {
81  if (!in_array($moduleName, self::$safeModeModules))
82  return false;
83  }
84 
85  if (isset(self::$arLoadedModules[$moduleName]))
86  return self::$arLoadedModules[$moduleName];
87 
88  if (isset(self::$arSemiloadedModules[$moduleName]))
89  trigger_error("Module '".$moduleName."' is in loading progress", E_USER_WARNING);
90 
91  $arInstalledModules = ModuleManager::getInstalledModules();
92  if (!isset($arInstalledModules[$moduleName]))
93  return self::$arLoadedModules[$moduleName] = false;
94 
95  $documentRoot = static::getDocumentRoot();
96 
97  $moduleHolder = self::LOCAL_HOLDER;
98  $pathToInclude = $documentRoot."/".$moduleHolder."/modules/".$moduleName."/include.php";
99  if (!file_exists($pathToInclude))
100  {
101  $moduleHolder = self::BITRIX_HOLDER;
102  $pathToInclude = $documentRoot."/".$moduleHolder."/modules/".$moduleName."/include.php";
103  if (!file_exists($pathToInclude))
104  return self::$arLoadedModules[$moduleName] = false;
105  }
106 
107  self::$arLoadedModulesHolders[$moduleName] = $moduleHolder;
108  self::$arSemiloadedModules[$moduleName] = true;
109 
110  $res = self::includeModuleInternal($pathToInclude);
111 
112  unset(self::$arSemiloadedModules[$moduleName]);
113  if ($res === false)
114  return self::$arLoadedModules[$moduleName] = false;
115 
116  return self::$arLoadedModules[$moduleName] = true;
117  }

◆ includeSharewareModule()

static includeSharewareModule (   $moduleName)
static

Includes shareware module by its name.

Module must initialize constant <module name>_DEMO = Y in include.php to define demo mode. include.php must return false to define trial period expiration. Constants is used because it is easy to obfuscate them.

Аргументы
string$moduleNameName of the included module
Возвращает
int One of the following constant: Loader::MODULE_NOT_FOUND, Loader::MODULE_INSTALLED, Loader::MODULE_DEMO, Loader::MODULE_DEMO_EXPIRED

См. определение в файле main/lib/loader.php строка 155

156  {
157  if (isset(self::$arSharewareModules[$moduleName]))
158  return self::$arSharewareModules[$moduleName];
159 
160  $moduleNameTmp = str_replace(".", "_", $moduleName);
161 
162  if (self::includeModule($moduleName))
163  {
164  if (defined($moduleNameTmp."_DEMO") && constant($moduleNameTmp."_DEMO") == "Y")
165  self::$arSharewareModules[$moduleName] = self::MODULE_DEMO;
166  else
167  self::$arSharewareModules[$moduleName] = self::MODULE_INSTALLED;
168 
169  return self::$arSharewareModules[$moduleName];
170  }
171 
172  if (defined($moduleNameTmp."_DEMO") && constant($moduleNameTmp."_DEMO") == "Y")
173  return self::$arSharewareModules[$moduleName] = self::MODULE_DEMO_EXPIRED;
174 
175  return self::$arSharewareModules[$moduleName] = self::MODULE_NOT_FOUND;
176  }

◆ isAutoLoadClassRegistered()

static isAutoLoadClassRegistered (   $className)
static

См. определение в файле main/lib/loader.php строка 290

291  {
292  $className = trim(ltrim($className, "\\"));
293  if ($className == '')
294  return false;
295 
296  $className = strtr($className, static::ALPHA_UPPER, static::ALPHA_LOWER);
297 
298  return isset(self::$arAutoLoadClasses[$className]);
299  }

◆ registerAutoLoadClasses()

static registerAutoLoadClasses (   $moduleName,
array  $arClasses 
)
static

Registers classes for auto loading.

All the frequently used classes should be registered for auto loading (performance). It is not necessary to register rarely used classes. They can be found and loaded dynamically.

Аргументы
string$moduleNameName of the module. Can be null if classes are not part of any module
array$arClassesArray of classes with class names as keys and paths as values.
Исключения
LoaderException

См. определение в файле main/lib/loader.php строка 220

221  {
222  if (empty($arClasses))
223  return;
224 
225  if (($moduleName !== null) && empty($moduleName))
226  {
227  throw new LoaderException(sprintf("Module name '%s' is not correct", $moduleName));
228  }
229 
230  if (!static::$isAutoLoadOn)
231  {
232  if (!is_null($moduleName) && !isset(static::$arLoadedModulesHolders[$moduleName]))
233  throw new LoaderException(sprintf("Holder of module '%s' is not found", $moduleName));
234 
235  $documentRoot = static::getDocumentRoot();
236 
237  if (!is_null($moduleName))
238  {
239  foreach ($arClasses as $value)
240  {
241  if (file_exists($documentRoot."/".self::$arLoadedModulesHolders[$moduleName]."/modules/".$moduleName."/".$value))
242  require_once($documentRoot."/".self::$arLoadedModulesHolders[$moduleName]."/modules/".$moduleName."/".$value);
243  }
244  }
245  else
246  {
247  foreach ($arClasses as $value)
248  {
249  if (($includePath = self::getLocal($value, $documentRoot)) !== false)
250  require_once($includePath);
251  }
252  }
253  }
254  else
255  {
256  foreach ($arClasses as $key => $value)
257  {
258  $class = ltrim($key, "\\");
259  self::$arAutoLoadClasses[strtr($class, static::ALPHA_UPPER, static::ALPHA_LOWER)] = array(
260  "module" => $moduleName,
261  "file" => $value
262  );
263  }
264  }
265  }

◆ registerHandler()

static registerHandler ( callable  $handler)
static

См. определение в файле main/lib/loader.php строка 285

286  {
287  static::$additionalHandlers[] = $handler;
288  }

◆ registerNamespace()

static registerNamespace (   $namespace,
  $module,
  $path 
)
static

Registers namespaces with custom paths.

e.g. ('Bitrix\Main\Dev', 'main', 'dev/lib')

Аргументы
string$namespace
string$module
string$path

См. определение в файле main/lib/loader.php строка 275

276  {
277  $namespace = rtrim($namespace, '\\');
278  $path = rtrim($path, '/\\');
279 
280  $path = static::getDocumentRoot()."/".static::$arLoadedModulesHolders[$module]."/modules/".$module.'/'.$path;
281 
282  static::$customNamespaces[$namespace] = $path;
283  }

◆ requireModule()

static requireModule (   $moduleName)
static

Includes module by its name, throws an exception in case of failure.

Аргументы
$moduleName
Возвращает
bool
Исключения
LoaderException

См. определение в файле main/lib/loader.php строка 127

128  {
129  $included = static::includeModule($moduleName);
130 
131  if (!$included && static::$requireThrowException)
132  {
133  throw new LoaderException("Required module `{$moduleName}` was not found");
134  }
135 
136  return $included;
137  }

◆ setRequireThrowException()

static setRequireThrowException (   $requireThrowException)
static

Changes requireModule behavior.

Аргументы
bool$requireThrowException

См. определение в файле main/lib/loader.php строка 475

476  {
477  self::$requireThrowException = (bool) $requireThrowException;
478  }

◆ switchAutoLoad()

static switchAutoLoad (   $value = true)
static

См. определение в файле main/lib/loader.php строка 206

207  {
208  static::$isAutoLoadOn = $value;
209  }

Поля

◆ ALPHA_LOWER

const ALPHA_LOWER = "qwertyuioplkjhgfdsazxcvbnm"

См. определение в файле main/lib/loader.php строка 60

◆ ALPHA_UPPER

const ALPHA_UPPER = "QWERTYUIOPLKJHGFDSAZXCVBNM"

См. определение в файле main/lib/loader.php строка 61

◆ BITRIX_HOLDER

const BITRIX_HOLDER = "bitrix"

См. определение в файле main/lib/loader.php строка 15

◆ LOCAL_HOLDER

const LOCAL_HOLDER = "local"

См. определение в файле main/lib/loader.php строка 16

◆ MODULE_DEMO

const MODULE_DEMO = 2

Returned by includeSharewareModule() if module works in demo mode.

См. определение в файле main/lib/loader.php строка 45

◆ MODULE_DEMO_EXPIRED

const MODULE_DEMO_EXPIRED = 3

Returned by includeSharewareModule() if the trial period is expired.

См. определение в файле main/lib/loader.php строка 49

◆ MODULE_INSTALLED

const MODULE_INSTALLED = 1

Returned by includeSharewareModule() if module is installed.

См. определение в файле main/lib/loader.php строка 41

◆ MODULE_NOT_FOUND

const MODULE_NOT_FOUND = 0

Returned by includeSharewareModule() if module is not found.

См. определение в файле main/lib/loader.php строка 37

◆ SAFE_MODE

const SAFE_MODE = false

Can be used to prevent loading all modules except main and fileman.

См. определение в файле main/lib/loader.php строка 13


Объявления и описания членов класса находятся в файле:
Bitrix\Main\Loader\MODULE_NOT_FOUND
const MODULE_NOT_FOUND
Returned by includeSharewareModule() if module is not found.
Definition: main/lib/loader.php:37
Bitrix\Main\Loader\MODULE_INSTALLED
const MODULE_INSTALLED
Returned by includeSharewareModule() if module is installed.
Definition: main/lib/loader.php:41
Bitrix\Main\Loader\MODULE_DEMO
const MODULE_DEMO
Returned by includeSharewareModule() if module works in demo mode.
Definition: main/lib/loader.php:45
Bitrix\Main\ModuleManager\getInstalledModules
static getInstalledModules()
Definition: modulemanager.php:8
Bitrix\Main\Loader\MODULE_DEMO_EXPIRED
const MODULE_DEMO_EXPIRED
Returned by includeSharewareModule() if the trial period is expired.
Definition: main/lib/loader.php:49
Bitrix\Main\Loader\LOCAL_HOLDER
const LOCAL_HOLDER
Definition: main/lib/loader.php:16
Bitrix\Main\Loader\getLocal
static getLocal($path, $root=null)
Checks if file exists in /local or /bitrix directories.
Definition: main/lib/loader.php:439
Bitrix\Main\Loader\BITRIX_HOLDER
const BITRIX_HOLDER
Definition: main/lib/loader.php:15