(cakephp)コンソール / シェルの利用

1. コンソールとは

Cakephpのコンソールとは、ブラウザのようなGUIではなく、
コマンドラインやシェルといったCUIを使って実行するアプリケーションを作るしくみを指す。

Cakephpでは、コンソールから実装可能なアプリケーションをシェル(Shell)、シェルの間で共通の処理をタスク(Task)と呼ぶ。

🌟Cakephpが用意しているシェル

- acl (ACL(Access Control LIst)を管理する。ACLでは指定したURLの操作の許可・拒否を設定できる)
- api (APIドキュメントを表示できる。たとえば「Console/cake api helper HtmlHelper」のように実行する)
- bake (すでに存在するテーブルや、テンプレートからアプリケーションの足場(scaffold)を作ることができる)

2. シェルを自作する

アプリケーションが利用するシェルは、app/Console/Commandディレクトリの下にPHPファイルを作成する。
命名規則 → 「コマンド名+shell.php

<?php  
// app/Console/Command/CategoryShell.php  
class CategoryShell extends AppShell  {
}  

😄カテゴリを一覧表示する処理を作成

CategoryShellクラスにindexというメソッドを追加する。

  public $uses = array('Category');    
  public function index() {
     $this -> out("id/tname");  
     foreach ($this -> Category -> find('all') as $category) {
        $this -> out($category['Category']['id'] . "\t" .$category['Category']['name']);
   }  
$ Console/Cake category index  

id name  
1  コンピューター  
2  生活  
3  グルメ  

😄カテゴリーの追加処理を作成

  public function add() {  
     $this -> Category -> create();  
     $this -> Category -> save(array('name' => $this->args[0]));  
     $this -> out('登録しました');  
  }  

$ Console/Cake category add 'はじめてのシェル'  

😄カテゴリの削除処理を作成

  public function delete() {
     $category = $this->Category->findById($this->args[0]);  
     $this -> out($category['Category']['id'] ."\t" . $category['Category']['name']);  
      if(strlower($this->in('本当に削除していいですか?',array('y', 'n'), 'n') ==  'n') {
         $this->out('終了します'); 
         return;
      }
      $this->Category->delete($this->args[0]);
      $this->out('削除しました');
  }
$ Console/Cake category delete 4