Создание внутренних модулей системы
Внутренние модули хранятся в директории /modules/
Обращение к внутренним модулям происходит через
use Modules\Название модуля
или $this→core→obj(«Название модуля»);
Если контроллер содержит сигнатуру
$this→core→obj(«Название модуля»,[сигнатура контроллера]);
Для создания модуля необходимо создать файл по названию вашего модуля с расширением php в корне указанной ранее директории и объявить в нем класс по названию вашего модуля, например:
mymodule.php
<?
namespace Modules;
class mymodule{
public function test(){
return 'test';
}
}
?>
Тогда обращение будет выглядеть вот так:
$this→core→obj(«Название модуля»)->test();
Так как часто при создании большого модуля бывает необходимо обращение к другим модулям, либо разбиение на несколько классов система предусматривает создание такой сложной структуры.
Хорошим тоном считается именно такое создание внутреннего модуля:
Файл mymodule.php из предыдущего примера является контроллером, хотя и может принимать аргументы методов.
Методы этого контроллера в связи с теми или иными условиями, вызванными пользователем или же самой системой обращаются к методам других классов этого или же другого модуля.
Для этого создаем директорию по названию нашего модуля на одном уровне с нашим файлом модуля (такая практика является хорошим тоном, так как облегчает поиски при анализе вашего модуля).
mymodule/
class1.php
<?
namespace Modules\mymodule;
class class1{
public function test($return){
return $return;
}
}
?>
class2.php
<?
namespace Modules\mymodule;
class class2{
public function test($return){
return $return;
}
}
?>
Мы создали 2 файла, как видим названия классов также соответствуют названию файлов.
Первый класс как мы видим наследуется от ядра, давайте теперь создадим внутри директории mymodule директорию custom/mymodule/custom/class1.php
Как мы видим название данного файла и соответственно класс совпадают, но благодаря namespace мы можем обращаться к обоим классам в одном файле.
<?
namespace Modules\mymodule\custom;
class class1{
public function test($return){
return $return;
}
}
?>
Теперь свяжем все классы между собой
mymodule.php
<?
namespace Modules;
use Modules\mymodule\Class1;
use Modules\mymodule\Class2;
use Modules\mymodule\custom;
class mymodule{
private $class1,$class2;
public function __construct(){
$this->class1 = new Class1();
$this→class2 = new Class2();
}
public function test($class,$return){
if($class==1){
return $this->class1->test($return);
}
else if($class==2){
return $this->class2->test($return);
}
else{
$custom = new custom\Class1;
return $custom->test($return);
}
}
}
?>
Для упрощения namespace большой вложенности можно использовать фасады, для этого достаточно поместить в файл /modules/facade.ini (если этого файла нет, вы можете создать его самостоятельно)
строчку, например:
custom=mymodule/custom/class1
После этого в файле mymodule.php
можно писать
$custom = $this->core->obj('custom');