Давайте создадим оболочку для использования в консоли. Для этого примера, мы создадим оболочку-"отчет", которая выведет некоторые данные модели. Во-первых, создадим report.php в /vendors/shells/.
<?php
class ReportShell extends Shell {
function main() {}
}
?>
Теперь мы можем запустить эту оболочку, но она ничего не будет делать. Давайте добавим несколько моделей в оболочку, чтобы мы могли созадить некий отчет. Это делается, так же как и в контроллере: добавлением имен моделей в переменную $uses.
<?php
class ReportShell extends Shell {
var $uses = array('Order');
function main() {
}
}
?>
После добавления нашей модели в массив $uses мы можем использовать её в методе main(). В этом примере наша модель Order будет доступна через $this->Order в методе main() нашей новой оболочки.
Здесь простой пример кода, который мы можем использовать в оболочке:
class ReportShell extends Shell {
var $uses = array('Order');
function main() {
//Получить заказы, отгруженные в последнем месяце
$month_ago = date('Y-m-d H:i:s', strtotime('-1 month'));
$orders = $this->Order->findAll("Order.shipped >= '$month_ago'");
//Вывести информацию о каждом заказе
foreach($orders as $order) {
$this->out('Order date: ' . $order['created'] . "\n");
$this->out('Amount: $' . number_format($order['amount'], 2) . "\n");
$this->out('----------------------------------------' . "\n");
$total += $order['amount'];
}
//Вывести итоги для выбранных заказов
$this->out("Total: $" . number_format($total, 2) . "\n");
}
}
Если команда cake определена в PATH, то вы можете запустить этот отчет на выполнение таким образом:
$ cake report
где report – имя файла оболочки в /vendor/shells/ без расширения .php. На выходе получится нечто подобное:
Hello user,
Welcome to CakePHP v1.2 Console
---------------------------------------------------------------
App : app
Path: /path/to/cake/app
---------------------------------------------------------------
Order date: 2007-07-30 10:31:12
Amount: $42.78
----------------------------------------
Order date: 2007-07-30 21:16:03
Amount: $83.63
----------------------------------------
Order date: 2007-07-29 15:52:42
Amount: $423.26
----------------------------------------
Order date: 2007-07-29 01:42:22
Amount: $134.52
----------------------------------------
Order date: 2007-07-29 01:40:52
Amount: $183.56
----------------------------------------
Total: $867.75