Приложения командной строки
Приложения CLI выполняются из командной строки. Они полезны для создания задач cron, скриптов, утилит командной строки и многого другого.
Структура
Минимальная структура приложения CLI будет выглядеть так:
- app/config/config.php
- app/tasks/MainTask.php
- app/cli.php <– основной файл загрузки
Создание загрузчика
Как и в обычных приложениях MVC, используется файл загрузчика для загрузки приложения. Вместо файла index.php для веб-приложений, мы используем файл cli.php для загрузки приложения.
Ниже приведен пример загрузчика, используемого в этом примере.
use Phalcon\Di\FactoryDefault\Cli as CliDI;
use Phalcon\Cli\Console as ConsoleApp;
use Phalcon\Loader;
// Using the CLI factory default services container
$di = new CliDI();
/**
* Register the autoloader and tell it to register the tasks directory
*/
$loader = new Loader();
$loader->registerDirs(
[
__DIR__ . "/tasks",
]
);
$loader->register();
// Load the configuration file (if any)
$configFile = __DIR__ . "/config/config.php";
if (is_readable($configFile)) {
$config = include $configFile;
$di->set("config", $config);
}
// Create a console application
$console = new ConsoleApp();
$console->setDI($di);
/**
* Process the console arguments
*/
$arguments = [];
foreach ($argv as $k => $arg) {
if ($k === 1) {
$arguments["task"] = $arg;
} elseif ($k === 2) {
$arguments["action"] = $arg;
} elseif ($k >= 3) {
$arguments["params"][] = $arg;
}
}
try {
// Handle incoming arguments
$console->handle($arguments);
} catch (\Phalcon\Exception $e) {
echo $e->getMessage();
exit(255);
}
Этот фрагмент кода можно запустить, используя:
$ php app/cli.php This is the default task and the default action
Задачи
Задачи работают аналогично контроллерам. Любое приложение CLI нуждается хотя бы в задаче MainTask и действии mainAction, и каждая задача должна иметь действие mainAction, которое будет выполняться, если явное действие не указано.
Ниже приведен пример файла app/tasks/MainTask.php:
use Phalcon\Cli\Task;
class MainTask extends Task
{
public function mainAction()
{
echo "This is the default task and the default action" . PHP_EOL;
}
}
Обработка параметров действия
Возможна передача параметров действиям, код для этого уже присутствует в примере загрузчика.
Если вы запустите приложение со следующими параметрами и действием:
use Phalcon\Cli\Task;
class MainTask extends Task
{
public function mainAction()
{
echo "This is the default task and the default action" . PHP_EOL;
}
/**
* @param array $params
*/
public function testAction(array $params)
{
echo sprintf(
"hello %s",
$params[0]
);
echo PHP_EOL;
echo sprintf(
"best regards, %s",
$params[1]
);
echo PHP_EOL;
}
}
Тогда мы можем выполнить следующую команду:
$ php app/cli.php main test world universe hello world best regards, universe
Выполнение задач в цепочке
Также возможно выполнение задач в цепочке, если это требуется. Для этого необходимо добавить консоль в DI:
$di->setShared("console", $console);
try {
// Handle incoming arguments
$console->handle($arguments);
} catch (\Phalcon\Exception $e) {
echo $e->getMessage();
exit(255);
}
Затем вы можете использовать консоль внутри любой задачи. Ниже приведен пример измененного файла MainTask.php:
use Phalcon\Cli\Task;
class MainTask extends Task
{
public function mainAction()
{
echo "This is the default task and the default action" . PHP_EOL;
$this->console->handle(
[
"task" => "main",
"action" => "test",
]
);
}
public function testAction()
{
echo "I will get printed too!" . PHP_EOL;
}
}
Однако, лучше расширять Phalcon\Cli\Task и реализовывать такой логики там.
© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/cli.html