Как протестировать через браузер консольное приложение Yii.
В большинстве случаев я создаю консольное приложение на Yii для запуска задач по cron. Это очень удобно, ничего лишнего. Но вот беда, тестировать такие приложения сложновато. Если идти по пути контроллеров и их методов, то тут все просто, вызываем точно также, как и обычный скрипт. Меняем лишь точку входа.
К примеру если раньше заходили на сайт
http://site.ru/index.php?r=site/login
то для консольного приложения создается отдельная точка входа. Все остальное же не меняется
http://site.ru/cron.php?r=site/cron
Но прелесть консольных приложений Yii в командах. Для каждой команды создается отдельный файл в папке protected/commands с именем {Commandname}Command.php
А в нем
<?php class SiteCommand extends CConsoleCommand { public function run($args) { // тут то, что необходимо выполнить по этой команде } }
вот тут возникает проблема. Как вызвать эту команду в браузере, для того, чтобы протестировать ее дееспособность.
Когда мы вызываем ее через cron мы делаем к примеру так
php /path/cron.php site
где site это параметр и название нужной нам команды. Не ищите ее в $_GET или $_POST. Откуда же Yii узнает откуда ему брать название команды?
Уверяю Вас, тут нет никакого волшебства. Все команды лежат тут
$_SERVER['argv'] = array(0=>'{путь до cron.php}',1=>'site' ...);
так что если хотите эмулировать выполнение команды через браузер, то просто заполните эти переменные.
Я делаю примерно так
if( isset($_GET['c']) and !empty($_GET['c'])){ $_SERVER['argv'] = array(0=>'{путь до cron.php}',1=>'site'); $_SERVER['argc'] = 2; }
А потом уже вызываю так
http://site.ru/cron.php?с=site
Может быть я не достаточно внимательно читал документацию, но решения я так и не нашел. Так, что если Вы напишите в комментах, как это делать грамотно, то буду весьма признателен.
Комментарии
http://www.yiiframework.com/wiki/226/run-yiic-directly-from-your-app-without-a-shell/