====== Команды. Интерфейс lmbCommand ======
===== Краткое описание =====
**Команды** - это группа классов, которые иногда используются при реализации действий контроллеров. Команды используются в тех случаях, когда действия тех или иных контроллеров содержат значительные повторения кода (code duplications), а создавать общего потомка для этих контроллеров не удобно или нецелесообразно.
Классы и интерфейсы подсистемы команд можно найти в папке **limb/web_app/src/command/**.
Команды реализуют простейший интерфейс **lmbCommand**:
interface lmbCommand
{
function perform();
}
Команды чаще всего запускаются при помощи специального метода lmbAbstractController :: **performCommand()**, который первым параметром принимает alias пути до файла с классом команды, а остальными - все, что нужно передать этому классу в конструктор, например:
class lmbCmsSaveObjectPriorityCommand extends lmbActionCommand
{
protected $class_name;
function __construct($class_name)
{
$this->class_name = $class_name;
parent :: __construct();
}
function perform()
{
[...]
}
}
class MyController extends lmbController
{
function doSavePriority()
{
$this->performCommand('limb/cms/src/command/lmbCmsSaveObjectPriorityCommand ', 'Folder');
}
}
Вызов
$this->performCommand('limb/cms/src/command/lmbCmsSaveObjectPriorityCommand', 'Folder');
полностю аналогочин следующему коду:
require_once('limb/cms/src/command/lmbCmsSaveObjectPriorityCommand.class.php');
$command = new lmbCmsSaveObjectPriorityCommand('Folder');
$command->perform();
На выполнении команд построена работа класса **lmbStaticCommandController**, которые все свои действия реализует в виде отдельных классов команд. Правда, стоит отметить, что в последнее время мы стали крайне редко использовать lmbStaticCommandController в своих проектах.
Классы команд обычно хранятся в папках /src/command пакетов.
===== Часто используемые команды =====
^Команда^Назначение^
|[[lmbBaseCommand|lmbBaseCommand]]|Базовый абстрактный класс команд. Хранит объекты request, response, session и toolkit и метод performCommand() аналогичный методу lmbAbstractController :: performCommand() для сокращения записи в дочерних командах. |
|[[lmbActionCommand]]|Родительский класс для всех команд, работающих со View. Получает в конструкторе имя шаблона и содержит набор helper-методов для работы со View.|
|[[lmbFormCommand|lmbFormCommand]]|Управляет процессом обработки форм. Позволяет регистрировать слушателей на события onBefore, onShow, onBeforeValidate, onValid, onError, onAfterValidate, onAfter, проводит валидацию и позволяет связать какой-то объект с компонентом шаблона в качестве контейнера данных.|