- Начало
- Основы
- Работа с формами
- Работа с БД
- Кэширование
- Расширение Yii
- Тестирование
- Специальные темы
- Автоматическая генерация кода
- Красивые адреса URL
- Аутентификация и авторизация
- Темы оформления и скины
- Журналирование
- Обработка ошибок
- Веб-сервисы
- Интернационализация (I18N)
- Альтернативный язык шаблонов
- Консольные приложения
- Безопасность
- Улучшение производительности
- Генерация кода при помощи консоли (устаревшее)
Консольные приложения
В процессе разработки консольные приложения в основном используются для выполнения вторичных или фоновых задач, таких как генерация кода, компиляция поискового индекса, отправка сообщений электронной почты и т.д. 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 во входном скрипте).
Использование утилиты yiic
Мы использовали утилиту yiic для создания первого Yii-приложения.
Эта утилита на самом деле является консольным приложение с входным скриптом framework/yiic.php.
Ее использование позволяет выполнить ряд задач: создание каркаса веб-приложения, генерация классов контроллеров и моделей,
генерация кода, необходимого для операций CRUD, получение списка сообщений, которые необходимо перевести и т.д.
Можно совершенствовать утилиту, добавляя собственные команды. Для этого вначале необходимо
создать каркас приложения с использованием команды yiic webapp, как описано в разделе Создание первого Yii-приложения. Эта команда создаст два файла в папке protected:
yiic и yiic.bat — локальные копии утилиты yiic, сгенерированные специально для создаваемого веб-приложения.
Теперь мы можем создавать собственные команды в папке protected/commands. При запуске локальной версии утилиты мы
увидим, что к стандартному набору команд добавились созданные нами. Кроме того, можно создать команды, которые
будут доступны при использовании yiic shell. Для этого файлы классов команд нужно просто поместить в папку
protected/commands/shell.
Начиная с версии 1.1.1, можно создавать глобальные команды, общие для всех
приложений Yii, установленных на одном сервере. Для этого необходимо задать
переменную окружения YII_CONSOLE_COMMANDS, указывающую на существующую
директорию, которая будет хранить классы команд. Команды будут доступны везде,
где мы используем yiic.

