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

Почему собственно встал вопрос об использовании консольных приложений в Yii framework. Все просто, контроллеры и экшены своё дело прекрасно делают, но встает вопрос, а как это все делать по CRON'y? Да, можно взять и выполнить что-то типа
GET http://somesait.ru/catalog/getinfo/id/123
или
wget http://somesait.ru/catalog/getinfo/id/123

смотря под какой операционкой сидим.


Итак, все на самом деле просто. Если вы создавали своё приложение через

#yiic webapp test

Тогда у вас должен быть готов конфиг для использования консоли. 

Находится в папке

protected/config и называется console.php

return array( 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..', 'name'=>'Only Console Application', // application components 'components'=>array( 'db'=>array( 'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db', ), // uncomment the following to use a MySQL database /* 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=testdrive', 'emulatePrepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', ), */ ), );

Ну примерно такой
 

Далее нам нужно создать входной файл через который мы будем общаться с нашими консольными приложениями.

У меня он находится в папке
protected/console.php и имеет такой вот код внутри

$yii='../framework/yii.php'; // где лежит yii $config=dirname(__FILE__).'/config/console.php'; // конфиг для консолек который выше описан // remove the following line when in production mode defined('YII_DEBUG') or define('YII_DEBUG',true); // включаем дебаг require_once($yii); Yii::createConsoleApplication($config)->run(); // и вот тут внимательно createConsoleApplication

 

Итак у нас практически все готово для начала работы, не хватает только самого консольного приложения, напишем же его :)

Располагаются они в папке protected/commands и имеют вид NameCommand.php, прошу обратить внимание именно на выделенную часть имени файла, если окончание будет другое то ничего не запуститься.

Где Name - это имя вашего приложения, ну а остаток - это зарезервировано Yii Framework.

class NameCommand extends CConsoleCommand {
    
    public function actionGetArhive() {
                   echo "First Console Command";
    }
    
    public function actionExtractArhive() {
                    echo "Second Console Command";
    }
}

 

Наследование должно быть от класса CConsoleCommand и иметь в названии окончание Command.

Тут мы создали одно приложение и 2 действия в нём. Если у Вас 1 действие и вы не хотите придумывать ему название, то напишите просто Run - это как бы автоматическое действие по умолчанию.

добрались до вызова нашего приложения. Делается все очень просто.

в консоли пишем

#console.php name // внимание без каких либо действий написали, для проверки работы

В результате чего должно появиться следующее сообщение

Usage: console.php catalog  Actions:     getArhive     extractArhive  т.е. нам говорят что ребят, нужно какбы написать дейтсвие после имени приложения, ну и yii сам выведет список тех действий которые есть в классе, Это очень удобно! 
Подходим к концу
#console.php name GetArhive

На что получим сообщение

 First Console Command

 

Все довольны, в CRON нужно просто добавить путь до скрипта console.php (кстати, назвать его вы можете как угодно, cron.php run.php go.php) как душа ляжет.
В общем-то все, вот так вот просто создаются консольные приложения на Yii Framework.

Если у кого-то есть замечания или предложения, я всегда рад выслушать и прочитать отзывы и комментарии.

Написана: 29.06.2012 00:00 | Просмотров: 83
Никто не удосужился оставить свой след. Ты можешь стать первым!
Автор
Email
Комментарий
Введите код c картинки: