0 follower

Консольные приложения

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

Каждая консольная задача представлена в Yii как команда, а экземпляр консольного приложения используется для направления запроса из командной строки соответствующей команде. Экземпляр приложения создается во входном скрипте. Для выполнения консольной задачи необходимо просто запустить соответствующую команду в командной строке:

php entryScript.php CommandName Param0 Param1 ...

где CommandName соответствует названию команды и нечувствителен к регистру, а Param0, Param1 и т.д. - параметры, передаваемые экземпляру команды.

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

defined('YII_DEBUG') or define('YII_DEBUG',true);
 
// подключаем файл инициализации Yii
require_once('path/to/yii/framework/yii.php');
 
// создаем и запускаем экземпляр приложения
$configFile='path/to/config/file.php';
 
Yii::createConsoleApplication($configFile)->run();

Далее создаем классы команд, наследуемых от класса CConsoleCommand. Название каждого класса команды должно соответствовать названию команды с добавлением Command. Например, чтобы создать команду email, нужно написать класс EmailCommand. Все файлы классов команд должны находиться в подпапке commands базовой директории приложения.

Подсказка: Конфигурируя CConsoleApplication::commandMap, можно при желании изменить порядок именования и расположения классов команд.

Написание класса команды, как правило, заключается в реализации метода CConsoleCommand::run, которому в виде массива передаются параметры командной строки:

class EmailCommand extends CConsoleCommand
{
    public function run($args)
    {
        $receiver=$args[0];
        // отправляем сообщение получателю $receiver
    }
}

В любой момент времени в команде через метод Yii::app() можно обратиться к экземпляру приложения. Консольное приложение также, как и веб-приложение, можно конфигурировать. Например, мы можем настроить компонент приложения db для доступа к базе данных. Конфигурация, как правило, оформляется в виде РНР-файла и передается конструктору класса консольного приложения (или методу createConsoleApplication во входном скрипте).

1. Использование утилиты yiic

Мы использовали утилиту yiic для создания первого Yii-приложения. Эта утилита на самом деле является консольным приложение с входным скриптом framework/yiic.php. Ее использование позволяет выполнить ряд задач: создание каркаса веб-приложения, генерация классов контроллеров и моделей, генерация кода, необходимого для операций CRUD, получение списка сообщений, которые необходимо перевести и т.д.

Можно совершенствовать утилиту, добавляя собственные команды. Для этого вначале необходимо создать каркас приложения с использованием команды yiic webapp, как описано в разделе Создание первого Yii-приложения. Эта команда создаст два файла в папке protected: yiic и yiic.bat - локальные копии утилиты yiic, сгенерированные специально для создаваемого веб-приложения.

Теперь мы можем создавать собственные команды в папке protected/commands. При запуске локальной версии утилиты мы увидим, что к стандартному набору команд добавились созданные нами. Кроме того, можно создать команды, которые будут доступны при использовании yiic shell. Для этого файлы классов команд нужно просто поместить в папку protected/commands/shell.