Spec-Zone.ru › Phalcon 2

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

Приложения 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,
     Phalcon\CLI\Console as ConsoleApp;

 define('VERSION', '1.0.0');

 //Using the CLI factory default services container
 $di = new CliDI();

 // Define path to application directory
 defined('APPLICATION_PATH')
 || define('APPLICATION_PATH', realpath(dirname(__FILE__)));

 /**
  * Register the autoloader and tell it to register the tasks directory
  */
 $loader = new \Phalcon\Loader();
 $loader->registerDirs(
     array(
         APPLICATION_PATH . '/tasks'
     )
 );
 $loader->register();

 // Load the configuration file (if any)
 if(is_readable(APPLICATION_PATH . '/config/config.php')) {
     $config = include APPLICATION_PATH . '/config/config.php';
     $di->set('config', $config);
 }

 //Create a console application
 $console = new ConsoleApp();
 $console->setDI($di);

 /**
 * Process the console arguments
 */
 $arguments = array();
 foreach($argv as $k => $arg) {
     if($k == 1) {
         $arguments['task'] = $arg;
     } elseif($k == 2) {
         $arguments['action'] = $arg;
     } elseif($k >= 3) {
        $arguments['params'][] = $arg;
     }
 }

 // define global constants for the current task and action
 define('CURRENT_TASK', (isset($argv[1]) ? $argv[1] : null));
 define('CURRENT_ACTION', (isset($argv[2]) ? $argv[2] : null));

 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), и каждая задача должна иметь главное действие, которое будет выполняться, если явно не указано другое действие.

Ниже приведен пример файла app/tasks/MainTask.php

class MainTask extends \Phalcon\CLI\Task
{
    public function mainAction() {
         echo "\nThis is the default task and the default action \n";
    }
}

Обработка параметров действия

Можно передавать параметры в действия. Код для этого уже есть в примере загрузчика.

Если вы запустите приложение со следующими параметрами и действием:

class MainTask extends \Phalcon\CLI\Task
{
    public function mainAction() {
         echo "\nThis is the default task and the default action \n";
    }

    /**
    * @param array $params
    */
   public function testAction(array $params) {
       echo sprintf('hello %s', $params[0]) . PHP_EOL;
       echo sprintf('best regards, %s', $params[1]) . 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);
}

Затем вы можете использовать консоль внутри любой задачи. Ниже приведен пример измененного файла MainTask.php:

class MainTask extends \Phalcon\CLI\Task
{
    public function mainAction() {
        echo "\nThis is the default task and the default action \n";

        $this->console->handle(array(
           'task' => 'main',
           'action' => 'test'
        ));
    }

    public function testAction() {
        echo '\nI will get printed too!\n';
    }
}

Однако, лучше расширять \Phalcon\CLI\Task и реализовывать этот тип логики там.

© 2011–2016 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/2.0.0/reference/cli.html

Spec-Zone.ru

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