Документация/Консольные команды

Консольные команды

Во фреймворке HLEB2 есть как встроенные консольные команды, так и возможность создания их разработчиком, использующим фреймворк.

Консольные команды запускаются из терминала или планировщика задач, входная точка для них — файл 'console' в корне проекта, представляющий собой обычный PHP-файл.


#Стандартные команды

Список команд фреймворка можно получить консольной командой:

$php console --help

--version or -v                                 (отображает текущую версию фреймворка)
--info or -i [name]                              (показ актуальных настроек из common)
--help or -h                                      (выводит список команд по умолчанию)
--ping                        (проверка сервиса, возвращает предопределённое значение)
--logs or -lg                             (вывод последних строчек из файлов с логами)
--list or -l                                    (отображает список добавленных команд)
--routes or -r                                    (отформатированный список маршрутов)
--find-route (or -fr) <url> [method] [domain]                  (поиск маршрута по URL)
--route-info (or -ri) <url> [method] [domain]           (информация о маршруте по URL)
--clear-routes-cache or -cr                                    (удаляет кеш маршрутов)
--update-routes-cache or --routes-upd or -u                  (обновляет кеш маршрутов)
--clear-cache or -cc                                     (очистка кеша для фреймворка)
--add <task|controller|middleware|model> <name> [desc]               (создание класса)
--create module <name>                                        (создание файлов модуля)
--clear-cache--twig or -cc-twig                  (очистка кеша для шаблонизатора Twig)

<command> --help                                            (запрос справки о команде)

#Создание собственной консольной команды

Пример добавления собственной консольной команды при помощи создания соответствующего класса в папке /app/Commands/Demo/:

<?php

namespace App\Commands\Demo;

use 
Hleb\Base\Task;

class 
ExampleTask extends Task
{
    
/**
     * Short description of the action.
     */
    
protected function run(?string $arg null): int
    
{
        
// Your code here.

        
return self::SUCCESS_CODE;
    }
}

Или через встроенную консольную команду:

$php console --add task demo/example-task "task description"

Будет создан файл /app/Commands/Demo/ExampleTask.php. При необходимости можно изменить исходный шаблон для генерации задач.

Во фреймворке название команды складывается из названия (относительного пути) класса, находящегося в папке /app/Commands/. Поэтому рекомендуется изначально давать командам значимые названия, отображающие суть их действия.

Теперь можно запустить новую команду из консоли, также она станет видна в общем списке команд.
Но так как в ней пока нет выводимого результата, добавим параметр --help, чтобы получить информацию о команде.

$php console demo/example-task --help


#Передача параметров с командой

Изменим созданный класс команды так, чтобы метод run() принимал аргументы.

<?php

namespace App\Commands\Demo;

use 
Hleb\Base\Task;

class 
ExampleTask extends Task
{
    
/**
     * Connecting two values using `and`.
     */
    
protected function run(string $argAstring $argB): int
    
{
        echo 
$argA ' and ' $argB PHP_EOL;

        return 
self::SUCCESS_CODE;
    }
}

Возвращаемое значение self::SUCCESS_CODE в классе команды показывает, что команда выполнилась успешно. Если команды в консоли или планировщике задач должны выполнится подряд через &&, то выполнение прервется при возврате self::ERROR_CODE. Это может быть полезно и в других комплексных случаях, таких как CI/CD.

После этого выполним команду с двумя аргументами, чтобы получить вывод 'speed and quality':

$php console demo/example-task speed quality

Для специальных случаев фреймворк позволяет создавать именованные параметры команд.


#Выполнение команды из кода

Созданную команду можно выполнить из кода приложения или из другой консольной команды.

use App\Commands\Demo\ExampleTask;
use 
Hleb\Static\Command;

Command::execute(new ExampleTask(), ['speed ''quality']);

Но только в этом случае результат работы команды не будет выведен, так как предназначение её теперь иное.
Чтобы получить результат работы команды, необходимо использовать внутри класса метод $this->setResult() для установки данных, а затем получить извне эти данные через метод getResult().

use App\Commands\Demo\ExampleTask;
use 
Hleb\Static\Command;

$task = new ExampleTask();
Command::execute($task, ['speed''quality']);
echo 
$task->getResult();

#Ограничения команд через атрибуты

Тип созданных команд и предназначение можно контролировать атрибутами PHP.

Аттрибут #[Purpose] предназначен для задания области видимости команд.

<?php

namespace App\Commands\Demo;

use 
Hleb\Base\Task;
use 
Hleb\Constructor\Attributes\Task\Purpose;

#[Purpose(status:Purpose::CONSOLE)]
class 
ExampleTask extends Task {
    
// ... //
}

У этого атрибута существует один аргумент status, в котором можно указать варианты:
Purpose::FULL - без ограничений, значение по умолчанию.
Purpose::CONSOLE - можно использовать только как консольную команду.
Purpose::EXTERNAL - использование только в коде, отсутствует в списке команд.

Аттрибут #[Disabled] у класса команды делает её неактивной.

Аттрибут #[Hidden] у класса команды скрывает её из списка консольных команд.

Шаблонизатор TWIG Контейнер

Страница создана: @fomiash
К началу страницы