ECサイト運営開発記

PHPフレームワーク Laravelの使い方を中心とした通販サイトの開発日記

Laravel4でArtisanによるCLI開発

Laravel4の便利機能のひとつにArtisanというコマンドラインツールが存在します。
プロジェクトルートにて、php artisan ***** とコマンドを打つことで、様々な命令を実行させることができる機能です。
今回は、とりあえず、CSVデータを読み込んで、DBにデータを保存するサンプルを作っていくことにします。

[下準備と前提条件]

  • CSVファイルは以下の形式とする
  • ファイル名はitem.csv
    • ファイルは app/storage/csv/ に保存する
  • Eloquentクラスを継承したItemクラスはすでに作成済みとする。

[コマンドクラスの作成]

  • プロジェクトルートにて以下のコマンドを実行
    • php artisan command:make ItemImport
      • app/command/ディレクトリにItemImportクラスファイルが生成される。
      • オートロードのクラスマップに反映させるために、composer dump-autoloadもしておきましょう。

[処理を記述]

  • ItemImportクラスファイルを開いて、以下を修正
    • protected $name : artisanコマンドで呼び出す際のコマンド名
    • protected $description : listやhelpを実行した時に表示されるコマンドの説明文
    • getArguments():コマンドが受け取る引数(今回は使いません)
      • 初期状態では、array('example', InputArgument::REQUIRED, 'An example argument.')となっているので、コメントアウト
    • getOptions():コマンドが受け取るオプション(今回は使いません)

-肝心の処理はfireメソッドに記述する。

<?php

class ItemImport extends Command {

  protected $name = 'new-item';
  protected $description = 'New Item Impoert!';

  /* 中略 */
  public function fire(){
    // CSV
    $handle = fopen(storage_path()."/db/item.csv", "r");
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE){
      // Eloquentでデータを挿入
      $item=new Item;
      $item->item_code=$data[0];
      $item->item_name=$data[1];
      $item->item_price=$data[2];
      $item->save();
    }
    echo "Completed!";
  }

  
  protected function getArguments(){
    return array(
      //array('example', InputArgument::REQUIRED, 'An example argument.'),
    );
  }

さぁ、これで使える!と思いきや、実はまだやることがあります。作ったコマンドをアプリケーションに登録しなければなりません。
方法は簡単で、app/start/artisan.phpを開いて、以下のように追加してあげればいいだけです。

<?php

Artisan::add(new ItemImport);

これで、準備OK。プロジェクトルートにて、以下のコマンドを実行

  • php artisan item-import
    • Completed!と表示されていれば、成功です。おめでとうございます。