Spec-Zone.ru › Phalcon 3

Приложения командной строки

Приложения 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API