Your SlideShare is downloading. ×
Task
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Task

995

Published on

1 Comment
0 Likes
Statistics
Notes
  • Hello,
    my name is Rita, I came across your profile now on this Site. So I decided to stop by an let you know that I really want to have a good friendship with you. Beside i have something special i want to discuss with you, but I find it difficult to express myself here, since it's a public site. I will be very happy, If you can get back to me, through my e-mail. [miss_rita42@yahoo.com] So we can get to know each other better, and i will give you my pictures and also tell you more about me OK, you can contact me through my e-mail id Is, [miss_rita42@yahoo.com] Regard,Rita.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total Views
995
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
1
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. タスクの作り方
  • 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. CLI アプリを Symfony で作るメリット
    • 開発が速い
    • 保守が容易
    • Web アプリのリソースを使える
  • 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()

×