SlideShare a Scribd company logo
1 of 13
タスクの作り方
タスクとは? Symfony で作る CLI アプリです。 デフォルトでたくさんのタスクが用意されています。 $ ./symfony Available tasks: :help  Displays help for a task :list  Lists tasks app :routes  Displays current routes for an application cache :clear  Clears the cache (cc)  :  :  :
タスクの作り方① <?php class SampleTask extends sfBaseTask { protected function execute($arguments = array(), $options = array()) { echo &quot;Hello, World!&quot;; } } $ ./symfony sample Hello, World! ファイル名は○○ Task.class.php /lib/task/ 配下に置く sfBaseTask を継承 「 symfony ○○ 」で実行できる
CLI アプリを Symfony で作るメリット ,[object Object],[object Object],[object Object]
タスクの作り方② $ ./symfony generate:task myapp:sample ※ myapp =ネームスペース ※ sample =タスク名 $ ./symfony myapp :sample $ ./symfony myapp:sample class myappSampleTask extends sfBaseTask { protected function configure() { $this->namespace  = 'myapp'; $this->name  = 'sample'; } protected function execute($arguments = array(), $options = array()) { } }
ヘルプを付ける protected function configure() { $this->briefDescription = ' サンプルアプリ '; $this->detailedDescription = ‘ これは [ サンプル |INFO] の [ アプリ |COMMENT] です。’ ; } $ ./symfony myapp :sample  サンプルアプリ $ ./symfony --color help myapp:sample Usage: symfony myapp:sample Description: これは サンプル の アプリ です。
コマンドライン引数の受け取り方 <?php class SampleTask extends sfBaseTask { protected function configure() { $this->addArguments(array( new sfCommandArgument('arg1', sfCommandArgument::REQUIRED, ' 引数1の説明 '), new sfCommandArgument('arg2', sfCommandArgument::OPTIONAL, ' 引数2の説明 ', ' 初期値 '), )); } protected function execute($arguments = array(), $options = array()) { echo $arguments['arg1']; } } ------------------------- $./symfony help sample Usage: symfony sample  arg1 [arg2] Arguments: arg1  引数1の説明 arg2  引数2の説明  (default:  初期値 )
コマンドラインオプションの受け取り方 <?php class SampleTask extends sfBaseTask { protected function configure() { $this->addOptions(array( new sfCommandOption('opt1', 'O', sfCommandOption::PARAMETER_REQUIRED, ' オプション1の説明 '), new sfCommandOption('opt2', null, sfCommandOption::PARAMETER_OPTIONAL, ' オプション2の説明 ', ' 初期値 '), )); } protected function execute($arguments = array(), $options = array()) { echo $options['opt1']; } } ------------------------- $ ./symfony help sample Usage: symfony sample [-O|--opt1=&quot;...&quot;] [--opt2[=&quot;...&quot;]] Options: --opt1  (-O)  オプション1の説明 --opt2  オプション2の説明  (default:  初期値 )
終了コードと例外処理 ◆ 終了コード execute メソッドの return 値が、 CLI アプリの終了コードになる。 成功  0 失敗  0 以外 ◆ 例外 throw new sfCommandException(' エラーです! ', 100); catch はフレームワーク側でしてくれる。 例外発生時の終了コードは Exception::getCode() の値
ログの出し方 protected function execute($arguments = array(), $options = array()) { $this->log('hogehoge'); $this->logSection('init', 'hogehoge'); $this->logSection('proc', 'hogehoge'); $messages = array('hoge', 'hogehoge', 'hogehogehoge'); $this->logBlock($messages, 'INFO'); } $ ./symfony sample hogehoge >>  init   hogehoge >>  proc   hogehoge hoge hogehoge hogehogehoge なぜ echo や print ではだめなのか? -> ログも event で実現しています
DB アクセスの仕方 protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase(' 接続名 ')->getConnection(); $member = Doctrine::getTable('Member')->find(1); $this->log($menber->getName()); }
Web アプリリソースへのアクセス方法 コンフィグ& ルーティング ------------------------- protected function configure() { $this->addOptions(array( new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, ' アプリ名 '), new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, ' 環境名 ', 'dev'), )); } $this->log(sfConfig::get('app_name')); $ symfony myapp:sample --application=frontend --env=dev ------------------------- $routing = $this->getRouting(); $this->log($routing->generate('homepage')); $this->log($routing->generate('default', array('module' => 'Login', 'action' => 'login'))); $ symfony myapp:sample --application=frontend --env=prod / /Login/login
その他 こんなのもあります。 ◆ メール送信 $this->getMailer() project:send-emails タスク ◆ 入力 $this->ask() $this->askConfirmation() $this->askAndValidate() ◆ ファイル操作 sfFilesystem ◆ タスクの起動 $this->runTask()

More Related Content

What's hot

おいしいLisp
おいしいLispおいしいLisp
おいしいLispKent Ohashi
 
Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20Takashi Kawachi
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
Effective java 勉強会
Effective java 勉強会Effective java 勉強会
Effective java 勉強会Takinami Kei
 
Java8 Lambda chapter5
Java8 Lambda chapter5Java8 Lambda chapter5
Java8 Lambda chapter5Takinami Kei
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7Tomohiro Namba
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To ClojureKent Ohashi
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011TokyoRyuichi Ueda
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングsatoshimurakumo
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~Takaaki Tanaka
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体digitalghost
 
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpTomohiro Kumagai
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftTomohiro Kumagai
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyYuya Takeyama
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
200319 eash python_shareslide_functions
200319 eash python_shareslide_functions200319 eash python_shareslide_functions
200319 eash python_shareslide_functionsHiroki Katayama
 

What's hot (20)

おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Effective java 勉強会
Effective java 勉強会Effective java 勉強会
Effective java 勉強会
 
Java8 Lambda chapter5
Java8 Lambda chapter5Java8 Lambda chapter5
Java8 Lambda chapter5
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To Clojure
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミング
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
 
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 
Haskell で CLI
Haskell で CLIHaskell で CLI
Haskell で CLI
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
200319 eash python_shareslide_functions
200319 eash python_shareslide_functions200319 eash python_shareslide_functions
200319 eash python_shareslide_functions
 
pecl-AOPの紹介
pecl-AOPの紹介pecl-AOPの紹介
pecl-AOPの紹介
 

Viewers also liked

Nca research-consumer-empowerment-oct-2010
Nca research-consumer-empowerment-oct-2010Nca research-consumer-empowerment-oct-2010
Nca research-consumer-empowerment-oct-2010National Consumer Agency
 
Kalkulus 2A – minggu 13
Kalkulus 2A – minggu 13Kalkulus 2A – minggu 13
Kalkulus 2A – minggu 13Iwan Pranoto
 
Revolusi Kopernikus oleh prof Bambang Hidayat
Revolusi Kopernikus oleh prof Bambang HidayatRevolusi Kopernikus oleh prof Bambang Hidayat
Revolusi Kopernikus oleh prof Bambang HidayatIwan Pranoto
 
Kalkulus 1A minggu 5
Kalkulus 1A   minggu 5Kalkulus 1A   minggu 5
Kalkulus 1A minggu 5Iwan Pranoto
 
Guru merdeka versi panjang
Guru merdeka   versi panjangGuru merdeka   versi panjang
Guru merdeka versi panjangIwan Pranoto
 
Business law
Business lawBusiness law
Business lawvinitvats
 
Kalkulus 2 minggu 4
Kalkulus 2   minggu 4Kalkulus 2   minggu 4
Kalkulus 2 minggu 4Iwan Pranoto
 
Mengukur kecakapan mematematikakan final
Mengukur kecakapan mematematikakan finalMengukur kecakapan mematematikakan final
Mengukur kecakapan mematematikakan finalIwan Pranoto
 
Passion to Teach, Conceptual Mastery
Passion to Teach, Conceptual MasteryPassion to Teach, Conceptual Mastery
Passion to Teach, Conceptual MasteryIwan Pranoto
 
Demo example
Demo exampleDemo example
Demo exampleGreg Rice
 
Matematika 1A minggu 2
Matematika 1A   minggu 2Matematika 1A   minggu 2
Matematika 1A minggu 2Iwan Pranoto
 
Matek 1 - Minggu 2
Matek 1 - Minggu 2Matek 1 - Minggu 2
Matek 1 - Minggu 2Iwan Pranoto
 
Consumer switching behaviour in Ireland, Aug 2012
Consumer switching behaviour in Ireland, Aug 2012Consumer switching behaviour in Ireland, Aug 2012
Consumer switching behaviour in Ireland, Aug 2012National Consumer Agency
 
Kalkulus 2 minggu 10
Kalkulus 2   minggu 10Kalkulus 2   minggu 10
Kalkulus 2 minggu 10Iwan Pranoto
 
Kalkulus 2A minggu 3 a
Kalkulus 2A   minggu 3 aKalkulus 2A   minggu 3 a
Kalkulus 2A minggu 3 aIwan Pranoto
 
Kalkulus 2 minggu 2
Kalkulus 2   minggu 2Kalkulus 2   minggu 2
Kalkulus 2 minggu 2Iwan Pranoto
 
Kalkulus 2A – minggu 8A
Kalkulus 2A – minggu 8AKalkulus 2A – minggu 8A
Kalkulus 2A – minggu 8AIwan Pranoto
 
Irish Consumer Empowerment and Complaining, January 2010
Irish Consumer Empowerment and Complaining, January 2010Irish Consumer Empowerment and Complaining, January 2010
Irish Consumer Empowerment and Complaining, January 2010National Consumer Agency
 

Viewers also liked (20)

Nca research-consumer-empowerment-oct-2010
Nca research-consumer-empowerment-oct-2010Nca research-consumer-empowerment-oct-2010
Nca research-consumer-empowerment-oct-2010
 
Kalkulus 2A – minggu 13
Kalkulus 2A – minggu 13Kalkulus 2A – minggu 13
Kalkulus 2A – minggu 13
 
Revolusi Kopernikus oleh prof Bambang Hidayat
Revolusi Kopernikus oleh prof Bambang HidayatRevolusi Kopernikus oleh prof Bambang Hidayat
Revolusi Kopernikus oleh prof Bambang Hidayat
 
Kalkulus 1A minggu 5
Kalkulus 1A   minggu 5Kalkulus 1A   minggu 5
Kalkulus 1A minggu 5
 
Guru merdeka versi panjang
Guru merdeka   versi panjangGuru merdeka   versi panjang
Guru merdeka versi panjang
 
Business law
Business lawBusiness law
Business law
 
Kalkulus 2 minggu 4
Kalkulus 2   minggu 4Kalkulus 2   minggu 4
Kalkulus 2 minggu 4
 
Mengukur kecakapan mematematikakan final
Mengukur kecakapan mematematikakan finalMengukur kecakapan mematematikakan final
Mengukur kecakapan mematematikakan final
 
Passion to Teach, Conceptual Mastery
Passion to Teach, Conceptual MasteryPassion to Teach, Conceptual Mastery
Passion to Teach, Conceptual Mastery
 
UN LOT VS HOT
UN   LOT VS HOTUN   LOT VS HOT
UN LOT VS HOT
 
Demo example
Demo exampleDemo example
Demo example
 
Matematika 1A minggu 2
Matematika 1A   minggu 2Matematika 1A   minggu 2
Matematika 1A minggu 2
 
Matek 1 - Minggu 2
Matek 1 - Minggu 2Matek 1 - Minggu 2
Matek 1 - Minggu 2
 
Consumer switching behaviour in Ireland, Aug 2012
Consumer switching behaviour in Ireland, Aug 2012Consumer switching behaviour in Ireland, Aug 2012
Consumer switching behaviour in Ireland, Aug 2012
 
Kalkulus 2 minggu 10
Kalkulus 2   minggu 10Kalkulus 2   minggu 10
Kalkulus 2 minggu 10
 
Kalkulus 2A minggu 3 a
Kalkulus 2A   minggu 3 aKalkulus 2A   minggu 3 a
Kalkulus 2A minggu 3 a
 
Kalkulus 2 minggu 2
Kalkulus 2   minggu 2Kalkulus 2   minggu 2
Kalkulus 2 minggu 2
 
Anuj resume
Anuj resumeAnuj resume
Anuj resume
 
Kalkulus 2A – minggu 8A
Kalkulus 2A – minggu 8AKalkulus 2A – minggu 8A
Kalkulus 2A – minggu 8A
 
Irish Consumer Empowerment and Complaining, January 2010
Irish Consumer Empowerment and Complaining, January 2010Irish Consumer Empowerment and Complaining, January 2010
Irish Consumer Empowerment and Complaining, January 2010
 

Similar to Task

Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプトbsdhack
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoyakenjis
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1kenjis
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?Kenji Nakamura
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめYu Nobuoka
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
JavaScript (ECMAScript) 2013
JavaScript (ECMAScript) 2013JavaScript (ECMAScript) 2013
JavaScript (ECMAScript) 2013dynamis
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)TatsuyaKatayama
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューAkira Inoue
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説JPCERT Coordination Center
 

Similar to Task (20)

Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
MP in Scala
MP in ScalaMP in Scala
MP in Scala
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Project lambda
Project lambdaProject lambda
Project lambda
 
JavaScript (ECMAScript) 2013
JavaScript (ECMAScript) 2013JavaScript (ECMAScript) 2013
JavaScript (ECMAScript) 2013
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説
 

Task

  • 2. タスクとは? Symfony で作る CLI アプリです。 デフォルトでたくさんのタスクが用意されています。 $ ./symfony Available tasks: :help Displays help for a task :list Lists tasks app :routes Displays current routes for an application cache :clear Clears the cache (cc)  :  :  :
  • 3. タスクの作り方① <?php class SampleTask extends sfBaseTask { protected function execute($arguments = array(), $options = array()) { echo &quot;Hello, World!&quot;; } } $ ./symfony sample Hello, World! ファイル名は○○ Task.class.php /lib/task/ 配下に置く sfBaseTask を継承 「 symfony ○○ 」で実行できる
  • 4.
  • 5. タスクの作り方② $ ./symfony generate:task myapp:sample ※ myapp =ネームスペース ※ sample =タスク名 $ ./symfony myapp :sample $ ./symfony myapp:sample class myappSampleTask extends sfBaseTask { protected function configure() { $this->namespace = 'myapp'; $this->name = 'sample'; } protected function execute($arguments = array(), $options = array()) { } }
  • 6. ヘルプを付ける protected function configure() { $this->briefDescription = ' サンプルアプリ '; $this->detailedDescription = ‘ これは [ サンプル |INFO] の [ アプリ |COMMENT] です。’ ; } $ ./symfony myapp :sample サンプルアプリ $ ./symfony --color help myapp:sample Usage: symfony myapp:sample Description: これは サンプル の アプリ です。
  • 7. コマンドライン引数の受け取り方 <?php class SampleTask extends sfBaseTask { protected function configure() { $this->addArguments(array( new sfCommandArgument('arg1', sfCommandArgument::REQUIRED, ' 引数1の説明 '), new sfCommandArgument('arg2', sfCommandArgument::OPTIONAL, ' 引数2の説明 ', ' 初期値 '), )); } protected function execute($arguments = array(), $options = array()) { echo $arguments['arg1']; } } ------------------------- $./symfony help sample Usage: symfony sample arg1 [arg2] Arguments: arg1 引数1の説明 arg2 引数2の説明 (default: 初期値 )
  • 8. コマンドラインオプションの受け取り方 <?php class SampleTask extends sfBaseTask { protected function configure() { $this->addOptions(array( new sfCommandOption('opt1', 'O', sfCommandOption::PARAMETER_REQUIRED, ' オプション1の説明 '), new sfCommandOption('opt2', null, sfCommandOption::PARAMETER_OPTIONAL, ' オプション2の説明 ', ' 初期値 '), )); } protected function execute($arguments = array(), $options = array()) { echo $options['opt1']; } } ------------------------- $ ./symfony help sample Usage: symfony sample [-O|--opt1=&quot;...&quot;] [--opt2[=&quot;...&quot;]] Options: --opt1 (-O) オプション1の説明 --opt2 オプション2の説明 (default: 初期値 )
  • 9. 終了コードと例外処理 ◆ 終了コード execute メソッドの return 値が、 CLI アプリの終了コードになる。 成功 0 失敗 0 以外 ◆ 例外 throw new sfCommandException(' エラーです! ', 100); catch はフレームワーク側でしてくれる。 例外発生時の終了コードは Exception::getCode() の値
  • 10. ログの出し方 protected function execute($arguments = array(), $options = array()) { $this->log('hogehoge'); $this->logSection('init', 'hogehoge'); $this->logSection('proc', 'hogehoge'); $messages = array('hoge', 'hogehoge', 'hogehogehoge'); $this->logBlock($messages, 'INFO'); } $ ./symfony sample hogehoge >> init hogehoge >> proc hogehoge hoge hogehoge hogehogehoge なぜ echo や print ではだめなのか? -> ログも event で実現しています
  • 11. DB アクセスの仕方 protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase(' 接続名 ')->getConnection(); $member = Doctrine::getTable('Member')->find(1); $this->log($menber->getName()); }
  • 12. Web アプリリソースへのアクセス方法 コンフィグ& ルーティング ------------------------- protected function configure() { $this->addOptions(array( new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, ' アプリ名 '), new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, ' 環境名 ', 'dev'), )); } $this->log(sfConfig::get('app_name')); $ symfony myapp:sample --application=frontend --env=dev ------------------------- $routing = $this->getRouting(); $this->log($routing->generate('homepage')); $this->log($routing->generate('default', array('module' => 'Login', 'action' => 'login'))); $ symfony myapp:sample --application=frontend --env=prod / /Login/login
  • 13. その他 こんなのもあります。 ◆ メール送信 $this->getMailer() project:send-emails タスク ◆ 入力 $this->ask() $this->askConfirmation() $this->askAndValidate() ◆ ファイル操作 sfFilesystem ◆ タスクの起動 $this->runTask()