CodeIgniter 入門      Aug. 13, 2011  第20回 オープンラボ岡山          sho <sho@codeigniter.jp>
本発表の主な対象者• PHP で何かつくったことがある• フレームワークを使ったことがない – 学習しようとしたが挫折した – 自作の“それっぽい何か”を使っている• オブジェクト指向をある程度理解していると better  – Class  ...
お品書き• CodeIgniter とは?  – なにがそんなにいいの?  – まだこんなコードを書きますか?• Hello World  – Controller  – View• データベースアクセス  – Active Record  –...
CodeIgniter とは?• [kóud ig・nít・er]• igniter: [名] 点火装置•   PHP 用のフレームワーク•   無料,オープンソース•   最初の公開は 2006年 2月•   現時点での最新バージョンは 2....
聞いたことないんだけど…               4
覚えて帰りましょう• Google トレンド   ■CodeIgniter,■CakePHP,■symfony,■zend                                          5
いま世界で最も注目されている!• Google トレンド (拡大図)                      6
さらに…• 利用実績 (ユーザ会のサイトより)                      7
岡山でも注目されている!• 利用実績 (ユーザ会のサイトより)               ・ 山陽新聞WEBNEWS               ・ さんようタウンナビ               ・ 岡山医療ガイド             ...
意外と人口多いですよ• ユーザ会の活動が活発 – CodeIgniter カンファレンス 2011 – ユーザガイド翻訳 – メーリングリスト• Web 上にも Tips がゴロゴロ – Yahoo! ブログ検索   「CodeIgniter」...
なにがそんなにいいの?              10
「高速」 「軽量」 「低い学習コスト」• 高速 – 他のフレームワークと比較しても圧倒的 – CodeIgniter ベンチマーク 検索• 軽量 – ソースの容量は約 1.2MByte• 低い学習コスト – 規約,覚えることが少ない      ...
CodeIgniter の特徴• 日本語のユーザガイドが完備                  12
CodeIgniter の特徴• コマンドライン操作が不要• レンタルサーバでも幅広く動作 – System は原則,外部ライブラリを不使用 – PHP のバージョンや環境設定の違いを吸収• ほとんど設定が不要 – とりあえず DB の接続情報...
CodeIgniter の特徴• 自分好みに  – コアクラスを書き換えられる (extends)• Smarty も使える• IDE との相性も良い  – Eclipse, NetBeans etc.                     ...
CodeIgniter の特徴• ライブラリが充実 例) – Form Validation    • フォームから送信された値を検査 – ページネーション    • 前のページ,次のページ… のようなリンクを生成 – Active Recor...
利用者の声• S. Y. さん (26歳 男性)                      僕のcodeに火がつきました                                       16
IDE で楽々開発• 私の開発環境: – Mac OS 10.7 – MAMP 2.0   • Apache 2.0   • MySQL 5.1   • PHP 5.3 – NetBeans 7.0 – Subversion          ...
まだこんなコード書きますか?                 18
まだこんなコードを書きますか?• 煩雑な入力チェック if (empty($_POST*‘name’+))         error(‘お名前が未入力です。’); if (!preg_match(‘/^*a-z0-9¥-_¥.]@[a-z0-...
まだこんなコードを書きますか?• ロジックとデザインがごちゃまぜ <html><body> <table> <?php require_once(conf.inc.php); $db = DB::connect(mysql://.DB_USER...
CodeIgniter なら…                  21
スパゲティコードとはもうお別れ• Smart なフォーム検証 – 入力必須,文字数,文字種 etc.• MVC にだいたい準拠                       22
フォーム検証         23
フォーム検証• 検証ルールをセット – $this->form_validation->set_rules(           ‘name 属性の値’,           ‘表示名’,           ‘検証ルール’   );• 検証 ...
フォーム検証• 検証ルールの一例  ルール名            用途  required        何か値が入力されているか  matches[hoge]   他のフィールドと一致するか                  (例: E-m...
フォーム検証• 実際のコードの例:        :                         検証ルールをセット     $this->_set_validation();     if ($this->form_validation-...
フォーム検証• ユーザにエラーを表示 (検証失敗時)  – set_value() で入力値を取得  – form_error() でエラー内容を取得• 例)       <tr>            <th>E-Mail</th>     ...
MVC      28
MVC• ソフトウェアを次の3つの構造に分割する手法 – Model    • 表示する内容を表現する      例) データベースアクセス – View    • データをユーザに表示する      例) HTML 出力 – Controll...
MVC• イメージ                    Controller             View                   Model      HTML                             Fil...
MVC のメリット     • 独立性を確保            – 機能ごとの役割分担が明確に     • 依存性の抑制            – 他の部分の変更による影響を受けにくく            – 部品の再利用性が向上    ...
Hello World!               32
使いはじめるまでの流れ1. ファイル一式をダウンロードしてきて設置2. (Unix系) 一部ディレクトリのパーミッションを変更3. とりあえず index.php にアクセス4. 設定ファイルで DB の接続情報を設定5. Controller...
ディレクトリ構成 (の一部)• index.php ………… フロントコントローラ• application/  – config/ ……………     設定ファイル  – controllers/ ……   Controller  – hel...
CodeIgniter の URL http://example.jp/hoge/index.php/fuga/piyo/foo   – fuga: クラス名 (default: welcome)   – piyo: メソッド名 (defaul...
Hello World!• Controller (application/controllers/hello.php)                 1文字目は               CI_Controller       <?php...
Hello World!• View (application/views/greet.php)      <html>      <head>      <title>Hello World!</title>      </head>    ...
Hello World!• ブラウザでアクセス  – http://example.jp/hoge/index.php/hello                                             38
データベースアクセス             39
データベースアクセス• 対応 DBMS – MySQL,MS SQL,Postgres,Oracle,SQLite etc.• 接続情報の設定 – application/config/database.php    $db[default][...
データベースアクセス• Active Record  – 取得や挿入,更新を最小限のコードで  – 各 DBMS 間の SQL 構文の違いを吸収  – 値を自動的にエスケープ処理※ もちろん自分で SQL 文を書くことも可能          ...
Active Record の使用法 (の一部)• 取得: get()  – $query = $this->db->get(‘mytable’, 10, 20);      SELECT * FROM mytable LIMIT 20, 10...
Active Record の使用法 (の一部)• 挿入: insert()  – $data = array(        ‘title’ => ‘My title’ ,        ‘name’ => ‘My Name’ ,      ...
Model の作成• 例) application/models/users_model.php                                                CI_Model      class Users_...
Controller から Model をロード• 例) application/controllers/user.php      class User extends CI_Controller {            (中略)     ...
以上,駆け足でしたが一通りご説明しました             46
次回予告 (あるかな?)• ライブラリ,ヘルパ関数の活用• 開発テクニック• 開発事例 etc.                   47
ご清聴ありがとうございました                 48
Upcoming SlideShare
Loading in...5
×

CodeIgniter入門

18,376

Published on

「速い」「自由」「習得しやすい」と話題沸騰中のPHPフレームワークCodeIgniterについて,「PHPで何かつくったことがある」レベルの方を対象に解説します。

http://blog.akagi.jp/archives/1776.html

Published in: Technology
0 Comments
20 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
18,376
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
0
Comments
0
Likes
20
Embeds 0
No embeds

No notes for slide

CodeIgniter入門

  1. 1. CodeIgniter 入門 Aug. 13, 2011 第20回 オープンラボ岡山 sho <sho@codeigniter.jp>
  2. 2. 本発表の主な対象者• PHP で何かつくったことがある• フレームワークを使ったことがない – 学習しようとしたが挫折した – 自作の“それっぽい何か”を使っている• オブジェクト指向をある程度理解していると better – Class – インスタンス – オーバーライド etc. 1
  3. 3. お品書き• CodeIgniter とは? – なにがそんなにいいの? – まだこんなコードを書きますか?• Hello World – Controller – View• データベースアクセス – Active Record – Model 2
  4. 4. CodeIgniter とは?• [kóud ig・nít・er]• igniter: [名] 点火装置• PHP 用のフレームワーク• 無料,オープンソース• 最初の公開は 2006年 2月• 現時点での最新バージョンは 2.0.2 (en)• EllisLab, Inc. が開発* CodeIgniter and its logo are property of ElisLab Inc. 3
  5. 5. 聞いたことないんだけど… 4
  6. 6. 覚えて帰りましょう• Google トレンド ■CodeIgniter,■CakePHP,■symfony,■zend 5
  7. 7. いま世界で最も注目されている!• Google トレンド (拡大図) 6
  8. 8. さらに…• 利用実績 (ユーザ会のサイトより) 7
  9. 9. 岡山でも注目されている!• 利用実績 (ユーザ会のサイトより) ・ 山陽新聞WEBNEWS ・ さんようタウンナビ ・ 岡山医療ガイド 8
  10. 10. 意外と人口多いですよ• ユーザ会の活動が活発 – CodeIgniter カンファレンス 2011 – ユーザガイド翻訳 – メーリングリスト• Web 上にも Tips がゴロゴロ – Yahoo! ブログ検索 「CodeIgniter」 約465件 9
  11. 11. なにがそんなにいいの? 10
  12. 12. 「高速」 「軽量」 「低い学習コスト」• 高速 – 他のフレームワークと比較しても圧倒的 – CodeIgniter ベンチマーク 検索• 軽量 – ソースの容量は約 1.2MByte• 低い学習コスト – 規約,覚えることが少ない 11
  13. 13. CodeIgniter の特徴• 日本語のユーザガイドが完備 12
  14. 14. CodeIgniter の特徴• コマンドライン操作が不要• レンタルサーバでも幅広く動作 – System は原則,外部ライブラリを不使用 – PHP のバージョンや環境設定の違いを吸収• ほとんど設定が不要 – とりあえず DB の接続情報を設定すれば動作 13
  15. 15. CodeIgniter の特徴• 自分好みに – コアクラスを書き換えられる (extends)• Smarty も使える• IDE との相性も良い – Eclipse, NetBeans etc. 14
  16. 16. CodeIgniter の特徴• ライブラリが充実 例) – Form Validation • フォームから送信された値を検査 – ページネーション • 前のページ,次のページ… のようなリンクを生成 – Active Record • 最小限のコードでデータベースにアクセス 15
  17. 17. 利用者の声• S. Y. さん (26歳 男性) 僕のcodeに火がつきました 16
  18. 18. IDE で楽々開発• 私の開発環境: – Mac OS 10.7 – MAMP 2.0 • Apache 2.0 • MySQL 5.1 • PHP 5.3 – NetBeans 7.0 – Subversion 17
  19. 19. まだこんなコード書きますか? 18
  20. 20. まだこんなコードを書きますか?• 煩雑な入力チェック if (empty($_POST*‘name’+)) error(‘お名前が未入力です。’); if (!preg_match(‘/^*a-z0-9¥-_¥.]@[a-z0-9¥-¥.]$/i’,$_POST*‘mail’+)) error(‘E-Mail を正しく入力してください。’); if (!(strlen($_POST*‘tel’+) >= 10 && strlen($_POST*‘tel’+) <= 13)) error(‘電話番号を正しく入力してください。’); 19
  21. 21. まだこんなコードを書きますか?• ロジックとデザインがごちゃまぜ <html><body> <table> <?php require_once(conf.inc.php); $db = DB::connect(mysql://.DB_USER.:.DB_PASS.@.DB_HOST./.DB_NAME); $stt = $db->prepare(’SELECT * FROM users ORDER BY user_id ASC;); $rs = $db->execute($stt); while ($row = $rs->fetchRow(DB_FETCHMODE_ASSOC)) { ?> <tr> <th><?= $row*‘id’+ ?></th><td><?= htmlspecialchars($row*‘name’+) ?></td> </tr> <?php } ?> </table> </body></html> 20
  22. 22. CodeIgniter なら… 21
  23. 23. スパゲティコードとはもうお別れ• Smart なフォーム検証 – 入力必須,文字数,文字種 etc.• MVC にだいたい準拠 22
  24. 24. フォーム検証 23
  25. 25. フォーム検証• 検証ルールをセット – $this->form_validation->set_rules( ‘name 属性の値’, ‘表示名’, ‘検証ルール’ );• 検証 成功: TRUE / 失敗: FALSE – $this->form_validation->run() 24
  26. 26. フォーム検証• 検証ルールの一例 ルール名 用途 required 何か値が入力されているか matches[hoge] 他のフィールドと一致するか (例: E-mailの確認入力) max_length[n] 文字数が指定の長さ以内か alpha_numeric 半角英数字で入力されているか valid_email E-mail アドレスとして正しい書式か – 複数指定するときはパイプ | で区切る – 自前のルールを定義することも可能 25
  27. 27. フォーム検証• 実際のコードの例: : 検証ルールをセット $this->_set_validation(); if ($this->form_validation->run() !== TRUE) { // 検証失敗 } else { 検証実行 // 検証成功 } } function _set_validation() { $this->form_validation->set_rules(mail, E-Mail, required|valid_email|max_length[100]); $this->form_validation->set_rules(birth, 生年月日, required|is_natural|exact_length[8]); } 26
  28. 28. フォーム検証• ユーザにエラーを表示 (検証失敗時) – set_value() で入力値を取得 – form_error() でエラー内容を取得• 例) <tr> <th>E-Mail</th> <td><input type="text" name="mail" size="30" value="<?php echo set_value(mail); ?>" /> <?php echo form_error(mail); ?></td> </tr> 27
  29. 29. MVC 28
  30. 30. MVC• ソフトウェアを次の3つの構造に分割する手法 – Model • 表示する内容を表現する 例) データベースアクセス – View • データをユーザに表示する 例) HTML 出力 – Controller • Model と View を制御し,ユーザの入力に応答する 29
  31. 31. MVC• イメージ Controller View Model HTML File データベース 30
  32. 32. MVC のメリット • 独立性を確保 – 機能ごとの役割分担が明確に • 依存性の抑制 – 他の部分の変更による影響を受けにくく – 部品の再利用性が向上 • 保守性の向上 – デザインとビジネスロジックの切り分け参考: http://www.atmarkit.co.jp/fjava/javafaq/j2ee/j2e07.html 31
  33. 33. Hello World! 32
  34. 34. 使いはじめるまでの流れ1. ファイル一式をダウンロードしてきて設置2. (Unix系) 一部ディレクトリのパーミッションを変更3. とりあえず index.php にアクセス4. 設定ファイルで DB の接続情報を設定5. Controller, View, Model の作成 33
  35. 35. ディレクトリ構成 (の一部)• index.php ………… フロントコントローラ• application/ – config/ …………… 設定ファイル – controllers/ …… Controller – helpers/ ………… 自作の関数 – libraries/ ……… 自作のクラス – models/ ………… Model – views/ …………… View• system/ …………… いじらない 34
  36. 36. CodeIgniter の URL http://example.jp/hoge/index.php/fuga/piyo/foo – fuga: クラス名 (default: welcome) – piyo: メソッド名 (default: index) – foo: 引数 (複数可,省略可) class Fuga extends CI_Controller { (中略) function piyo($foo, $bar = ‘test’) , … } }※ “index.php/” は mod_rewrite で取り除くことも可能 35
  37. 37. Hello World!• Controller (application/controllers/hello.php) 1文字目は CI_Controller <?php 大文字 を継承 class Hello extends CI_Controller { (中略) function index() { $data*‘str’+ = Hello World!; $this->load->view(’greet, $data); } } View を呼び出す 36
  38. 38. Hello World!• View (application/views/greet.php) <html> <head> <title>Hello World!</title> </head> 変数の値を出力 <body> <h1><?php echo($str); ?></h1> </body> </html>※ 必要に応じて値のエスケープを※ テンプレートパーサも利用可 37
  39. 39. Hello World!• ブラウザでアクセス – http://example.jp/hoge/index.php/hello 38
  40. 40. データベースアクセス 39
  41. 41. データベースアクセス• 対応 DBMS – MySQL,MS SQL,Postgres,Oracle,SQLite etc.• 接続情報の設定 – application/config/database.php $db[default][hostname] = localhost; $db*‘default’+*‘username’+ = ‘dbuser; $db[default][password] = sHFm2F7h; $db[default][database] = ‘mydb; $db[default][dbdriver] = mysql; 40
  42. 42. データベースアクセス• Active Record – 取得や挿入,更新を最小限のコードで – 各 DBMS 間の SQL 構文の違いを吸収 – 値を自動的にエスケープ処理※ もちろん自分で SQL 文を書くことも可能 41
  43. 43. Active Record の使用法 (の一部)• 取得: get() – $query = $this->db->get(‘mytable’, 10, 20); SELECT * FROM mytable LIMIT 20, 10;• 条件を指定: where() – $this->db->where(array(‘id’ => 123)); $query = $this->db->get(‘mytable’); SELECT * FROM mytable WHERE id=123; 42
  44. 44. Active Record の使用法 (の一部)• 挿入: insert() – $data = array( ‘title’ => ‘My title’ , ‘name’ => ‘My Name’ , ‘date’ => ‘My date‘ ); $this->db->insert(’mytable’, $data); INSERT INTO mytable (title, name, date) VALUES (My Title, My Name, My Date); 43
  45. 45. Model の作成• 例) application/models/users_model.php CI_Model class Users_model extends CI_Model { を継承 (中略) function get_user($user_id) { $this->db->where(user_id, $user_id); $query = $this->db->get(users); クエリを組立 $result = $query->result(); return $result[0]; 結果を取得 } }※ Model 名とテーブル名は同じにするのがおすすめ※ 実際には引数や結果の検査,例外処理をするべき 44
  46. 46. Controller から Model をロード• 例) application/controllers/user.php class User extends CI_Controller { (中略) Model を load function show($user_id) { $this->load->model(‘Users_model’); 結果を取得 $data*‘userinfo’+ = $this->Users_model->get_user($user_id); $this->load->view(’showuser, $data); } } View に渡す 45
  47. 47. 以上,駆け足でしたが一通りご説明しました 46
  48. 48. 次回予告 (あるかな?)• ライブラリ,ヘルパ関数の活用• 開発テクニック• 開発事例 etc. 47
  49. 49. ご清聴ありがとうございました 48

×